AngularJS在控制器运行之前承诺阻塞

时间:2014-11-26 17:30:44

标签: angularjs

A有一个Angular JS应用程序,其中包含以下内容:

带有以下内容的运行块以设置当前用户:

的javascript

app.run(function($rootScope, $http){
  $http.get("/users/current").success(function(data){
    $rootScope.current_user = data;
  });
});

我将/ users / current路由设置需要5秒才能解决,以模拟网络状况不佳。

我的应用程序使用ngRouter。有一个叫做“主控制器”的“外部”控制器,里面有ng-view:

HTML

<html ng-app>
  <body ng-controller="MainController">
    <div ng-view>
    </div>
  </body>
</html>

内部控制器的代码直到运行块中的promise已经解决后才会执行,所以这有效:

的javascript

app.controller('InnerController', function($scope, $rootScope){
  $scope.logged_in_user = $rootScope.current_user.username;
  // logged in user is correct
  // alert($rootScope.current_user.username); // This will work 
});

主控制器的代码在运行块中的promise已经解决之前执行,所以这不起作用:

的javascript

app.controller('MainController', function($scope, $rootScope){
  $scope.logged_in_user = $rootScope.current_user.username;
  // logged in user is undefined
  // alert($rootScope.current_user.username); // This will throw an exception, as current_user is undefined, and you are trying to call the property username on undefined.
});

问题

  1. 为什么这两个控制器之间的行为不同?
  2. 有没有办法保证行为是一样的? Angular在运行控制器之前等待运行块中的promise被解决了吗?
  3. 如果没有,有没有办法可以将承诺放到$ rootScope上,然后获取承诺返回的值?我需要能够在多个地方执行此操作,并且我不想$观察任何变量。

0 个答案:

没有答案