【发布时间】:2017-01-19 21:04:51
【问题描述】:
所以,我正在尝试动态加载一个将控制器添加到我的主模块的文件。问题是我不想在脚本标签中引用文件本身。
更具体地说,我有 2 个控制器文件。我的index.html 文件中引用的主控制器文件mainController.js。我添加到该文件的任何控制器都可以正常加载。
我想用于登录页面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() 角度中提到控制器名称,它会在加载之前尝试访问它,并且整个事情甚至在加载文件之前就崩溃了
【问题讨论】:
标签: javascript angularjs oclazyload