在加载控制器之前,我的AngularJS解析没有完成。
背景:假设我有一个请求的“我的个人资料”页面(用户加载website.com/user)。我希望有角度拦截请求并从服务器请求相应的数据。
服务器将以不同方式回复,具体取决于用户是否已登录/ active / etc.我想在加载模板之前,以及在启动适当的控制器之前从服务器获取数据。到目前为止它没有。
App.js代码:
.when('/user',
{
templateUrl:'/templates/user',
controller: 'my_profile',
resolve: {
some_cute_function_name: function($timeout){
$timeout(function(){
console.log('here123');
},5)
}
}
同时,控制器代码:
console.log('about to update scope');
事实证明,控制器是在解析完成之前启动的。我知道这是因为$ timeout之前的秒数越多,我就越有可能看到这个:
about to update scope
here123
而不是相反。
有没有办法确保在启动控制器之前解决问题?
非常感谢!
答案 0 :(得分:5)
你的解析器需要返回一个承诺:
.when('/user',
{
templateUrl:'/templates/user',
controller: 'my_profile',
resolve: {
some_cute_function_name: function($timeout){
return $timeout(function(){
console.log('here123');
return { some: 'data' };
},5);
}
}
答案 1 :(得分:0)
AngularJS将resolve描述为:
“应该注入控制器的可选依赖关系映射。如果这些依赖关系中的任何一个是承诺,路由器将等待它们全部被解析或者在控制器之前被拒绝一个实例化。“ (重点补充)
我认为除非任何依赖项都是promises,在实例化控制器之前,angular不会等待解析完成(即使我的操作需要很长时间才能完成,比如$ $ timeout。
解决方案:您必须确保解决方案涉及承诺。