所以,我正在尝试动态加载一个将控制器添加到我的主模块的文件。问题是我不想在脚本标签中引用文件本身。
更具体地说,我有 2 个控制器文件。mainController.js
我的文件中引用的主控制器index.html
文件。我添加到该文件的任何控制器都可以正常加载。
我想用于登录页面的控制器文件login.js
包含以下信息:
function LoginCtrl($http){
console.log("Controller loaded");
};
angular
.module('inspinia')
.controller('LoginCtrl', LoginCtrl);
我所有的控制器文件都在同一个文件夹中,但是,与 相反mainController.js
,该login.js
文件不会出现在任何.html
文件中。
我的意图是stateProvider
像这样在我的内部动态加载 login.js 文件:
$stateProvider
...
.state('logins', {
url: "/logins",
templateUrl: "views/login.html",
controller: LoginCtrl,
data: { pageTitle: 'Login', specialClass: 'gray-bg' },
resolve: {
loadPlugin: function($ocLazyLoad) {
return $ocLazyLoad.load ({
name: 'inspinia.LoginCtrl',
files: ['js/controllers/login.js']
});
}
}
})
...
只要我不尝试动态加载login.js
文件(因此在 .html 文件中添加对文件的引用或在 mainController.js 文件中添加登录控制器代码),一切正常。但是,一旦我尝试删除引用以强制 stateProvider 处理加载,我就会得到一个Error: $injector:modulerr
任何人都知道调用lazyLoader 的正确方法是什么,所以我只能在需要时加载我的.js 文件?
编辑信息: 我忘记提及的事情:文件加载部分本身似乎正在工作。如果我不在任何地方调用控制器并且只加载它。我可以看到浏览器正在加载控制器文件。但问题似乎是时间问题。如果我在 .state() 角度中提到控制器名称,它会在加载之前尝试访问它,并且整个事情甚至在加载文件之前就崩溃了