在AngularJS中解析resolve之前加载控制器

时间:2013-12-23 01:43:39

标签: javascript angularjs

在加载控制器之前,我的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

而不是相反。

有没有办法确保在启动控制器之前解决问题?

非常感谢!

2 个答案:

答案 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。

解决方案:您必须确保解决方案涉及承诺。

相关问题