我希望可以这样加载控制器:
我想要这样加载控制器:
.state({
name: 'app.search',
url: 'search?q&opts',
templateUrl: '/templates/search.html',
controller: 'SearchCtrl',
resolve: {
deps: function($util){
return $util.load(['/ctrl/SearchCtrl.js']);
}
}
})
控制器已加载但我遇到了以下错误,导致我认为控制器没有被注册:
参数 'SearchCtrl' 不是函数,而是未定义的
我的问题是,当按照下面所示的方式懒加载控制器时,我应该如何注册控制器。
控制器的定义如下:
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();
}
});
});
});
},
$rootScope.$apply()
。您还可以使用专为此任务设计的模块,例如oc-lazyLoad。https://oclazyload.readme.io/docs/with-your-router - Claies