我想负载控制器,像这样:寄存器lazyloaded控制器angularjs
.state({
name: 'app.search',
url: 'search?q&opts',
templateUrl: '/templates/search.html',
controller: 'SearchCtrl',
resolve: {
deps: function($util){
return $util.load(['/ctrl/SearchCtrl.js']);
}
}
})
控制器负载,但我得到以下错误,导致我相信,控制器未注册:
Argument 'SearchCtrl' is not aNaNunction, got undefined
所以我的问题是,我如何去注册控制器时,如图所示懒惰地加载它。
控制器被定义为:
app.module('app').controller('SearchCtrl',function(){
});
有什么我可以做,以迫使控制器注册?
编辑该应用程序已建成,所有作品都是精美的。这个问题只适用于懒惰。
问题与定义完全一样,控制器未注册,因为引导进程已经运行。我正在寻找一些方法来注册控制器,当它被延迟加载。
我的装载函数($util.load()
看起来像这样:
load: function(){
if(arguments.length > 1){
var items = arguments;
}else{
var items = arguments[0];
}
var _self = this;
return $q(function(resolve,reject){
if(items.length == 0){
return resolve();
}
_self.async(items, function(item,next){
if(item.indexOf('.js') != -1){
_self.loadOne('script',item,next,function(err){
next(err);
});
}
else if(item.indexOf('.css') != -1){
_self.loadOne('link',item,next);
}else{
next();
}
},function(errors,results){
$timeout(function() {
$rootScope.$apply();// @Claies suggestion
if(errors){
reject(errors);
}else{
resolve();
}
});
});
});
},
您是否有单独声明的模块? – Sajeetharan
应用模块?当然。这个应用程序已经建成,但所有的代码都在一个单一的文件。我试图将所有代码拆分为单独的文件和延迟加载 – r3wt
,在加载器加载并执行控制器文件之前,您需要使用'$ rootScope。$ apply()'*,然后才能返回解析。您也可以使用专为此任务设计的模块,如oc-lazyLoad。 https://oclazyload.readme.io/docs/with-your-router – Claies