$ionicPlatform.准备不开火

$ionicPlatform.ready not firing

本文关键字:开火 ionicPlatform      更新时间:2023-09-26

我有问题,如果我添加路由器文件和控制器文件,$ionicPlatform.ready中的代码没有启动,但我找不到问题。

模板和控制器工作正常。

index.html

<script src="lib/ionic/js/ionic.bundle.js"></script>
<script src="cordova.js"></script>
<script src="js/app.js"></script>
<script src="js/core/router/app.router.js"></script>
<script src="js/feature/notification/notification.js"></script>
<body ng-app="app">
    <ion-nav-view></ion-nav-view>
</body>

app.js

angular
    .module('app', ['ionic'])
    .run(function($ionicPlatform) {
        $ionicPlatform.ready(function() {
            if (window.cordova && window.cordova.plugins.Keyboard) {
                cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
                cordova.plugins.Keyboard.disableScroll(true);
            }
            if (window.StatusBar) {
                StatusBar.styleDefault();
            }
            console.log('##################');
        });
    });

app.router.js

angular
    .module('app', ['ionic', 'ui.router'])
    .config(Router);
Router.$inject = ['$stateProvider', '$urlRouterProvider'];
function Router($stateProvider, $urlRouterProvider) {
    $urlRouterProvider.otherwise('/');
    $stateProvider
        .state('notifications', {
            url: '/',
            templateUrl: 'js/feature/notification/notification.html',
            controller: 'NotificationCtrl',
            controllerAs: 'model'
        });
}

notifications.js

angular
    .module('app')
    .controller('NotificationCtrl', NotificationCtrl);
function NotificationCtrl() {
    var model = this;
    console.log('Test');
}

感谢您抽出时间

封装在$ionicPlatform.ready中的代码不会运行,因为您要多次定义应用程序模块,而应用程序模块本应仅在app.js中定义。对模块的后续调用应该省略依赖项注释。在这种情况下,可以将app.router.js中的行从.module('app', ['ionic', 'ui.router'])更改为.module('app')

另一件需要注意的事情是,使用Ionic,您不需要自己注入ui-router,因为它包含在Ionic束中。

但是,您不应该删除Router.$inject = ['$stateProvider', '$urlRouterProvider'];,除非您使用自动注释工具(如ng-annotate),因为在缩小代码时可能会出现问题(谢谢,@AdityaSingh)。

(为清晰准确而编辑。)