4

我使用 angular.ui.router 在我的单页应用程序中管理路由。部分配置如下所示:

.state('app.mymodule', {
    url: '/mymodule',
    resolve: loadSequence('ngResource', 'MyModule'),
    template: '<div ui-view class="fade-in-up"></div>',
    abstract: true
})
.state('app.mymodule.overview', {
    url: '/overview',
    templateUrl: "assets/views/mymodule/overview.html",
    title: 'Overview',
    role: 'systemadmin',
    ncyBreadcrumb: {
        label: 'Overview'
    }
});

"MyModule"inresolve是几个文件的数组,我在其中定义了 angular.module 以及一个服务和一个控制器:

'MyModule': [
    'assets/js/mymodule/mymodule.js',
    'assets/js/mymodule/project/Project.js',
    'assets/js/mymodule/project/ProjectService.js',
    'assets/js/mymodule/project/ProjectCtrl.js',
],

现在,当我在我的应用程序中请求路由时,有时资源都已正确加载:

[Info] ocLazyLoad.componentLoaded – ["MyModule", "factory", "ProjectREST"] (3) (angular.min.js, line 107)
[Info] ocLazyLoad.componentLoaded – ["MyModule", "service", "ProjectService"] (3) (angular.min.js, line 107)
[Info] ocLazyLoad.componentLoaded – ["MyModule", "register", "ProjectCtrl"] (3) (angular.min.js, line 107)
[Info] ocLazyLoad.moduleLoaded – "MyModule" (angular.min.js, line 107)

但有时,日志如下所示:

[Info] ocLazyLoad.componentLoaded – ["MyModule", "factory", "ProjectREST"] (3) (angular.min.js, line 107)
[Info] ocLazyLoad.componentLoaded – ["MyModule", "service", "ProjectService"] (3) (angular.min.js, line 107)
[Info] ocLazyLoad.moduleLoaded – "MyModule" (angular.min.js, line 107)
[Info] ocLazyLoad.fileLoaded – "assets/js/mymodule/project/ProjectCtrl.js" (angular.min.js, line 107)

所以 ocLazyLoad 不会将控制器注册为控制器,而只是在模块完成后加载文件。这是随机发生的,代码没有任何变化。然后当然控制器无法被视图识别并ng:areq (Bad Argument)抛出错误..

这里可能是什么问题?ocLazyLoader 是否异步加载且顺序不正确?

PS:路由和延迟加载的一般结构是由我目前使用的 AngularJS 模板ClipTwo引入的。

4

0 回答 0