如何通过require.js引导异步加载的控制器? 如果我有类似的东西:
$routeProvider.when('/',
{
templateUrl:'view1.html',
controller:'ctrl',
resolve:{
load:function($q){
var dfrd = $q.defer();
require(['view1-script'],function(){
dfrd.resolve();
})
return dfrd.promise;
}
}
})
为什么角度仍然找不到控制器?我在加载脚本后解析路径
答案 0 :(得分:1)
尝试调用$controllerProvider.register
来创建控制器。在解决延迟后我也会在$apply()
上调用$rootScope
因为没有它,视图似乎不会出现:
load: function($q, $rootScope){
var dfrd = $q.defer();
require(['view1'],function(){
dfrd.resolve();
$rootScope.$apply();
})
return dfrd.promise;
}
答案 1 :(得分:-1)
已经3年了,但是,如果有人仍然感兴趣,几个月前我写了a post about a similar technique来做这件事。
最重要的部分是方法$routeProvider.when(route, ctrl)
方法的第二个参数可以处理承诺,因此您可以简单地模拟它:
function controllerFactory(ctrl) {
return {
then: function (done) {
var self = this;
require(['./controller/' + ctrl], function (ctrl) {
self.controller = ctrl;
self.resolve = ctrl.resolve;
self.templateUrl = ctrl.templateUrl;
done();
});
}
};
}
你最终可以像这样编写你的路线定义:
$routeProvider.
when('/some/route', controllerFactory('some/route')).
when('/other/route', controllerFactory('other/route'))