我想負載控制器,像這樣:寄存器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