我使用 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引入的。