我使用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"
中的resolve
是一个数组,用于定义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引入了带路由和延迟加载的一般结构。