$ ionicPlatform.ready没有开火

时间:2016-04-15 21:07:03

标签: javascript angularjs cordova ionic-framework

我遇到问题,如果我添加路由器文件和控制器文件但是我找不到问题,$ 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');
}

感谢您的时间

1 个答案:

答案 0 :(得分:3)

$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)。

(为了清晰和准确而编辑。)