AngularJS - 无法访问RootScope

时间:2013-01-07 18:33:29

标签: javascript controller scope angularjs

奇怪的问题, 我无法访问在CtrlA中设置的CtrlB变量中的$ rootScope。

HTML

<div role="main" class="container_9" ng-controller="CountryCtrl" ng-init="updateToken('<?php echo $TOKEN; ?>')">  

CtrlA

app.controller('CountryCtrl', function ($scope,$rootScope, $http) {
  $scope.updateToken = function(token) {
        $rootScope.token = token;
  } 
});  

CtrlB

app.controller('DealerListCtrl', function ($scope, $http, $rootScope, dealerService) {
  $scope.dealer = [];
    $http.get('files/framework/dealer/'+ $rootScope.token).success(function(data) {
        $scope.dealerall = data;
    });
  //$scope.dealerall = dealerService.api.get({token: $scope.token});
  $scope.orderProp = 'name';

});  

错误消息:

/framework/dealer/undefined 500 (Internal Server Error)   

我做错了什么?

更新
Plunker代码:
http://plnkr.co/edit/r559zyMKjA64xSdmrTem

它无法运行......

2 个答案:

答案 0 :(得分:2)

这里有两个关键问题:第一,当你应该使用服务时使用$ rootScope;第二,你假设执行控制器的顺序。如果只是第二个问题,您可以设置$ watch命令来监视更改,以确保您的第二个控制器具有更新值,无论何时设置。

但是你不应该污染全球范围。将您的令牌包装到可以注入的服务中,您可以在其中监视更改。也就是说,我不能发布任何更具体的内容(即代码)而不知道你的控制器在什么情况下运行。

但我希望这会有所帮助!如果您愿意,可以使用更多信息更新您的帖子,我会深入了解一下。实际上,如果你能创建一个我可以直接修改的Plunker或jsFiddle,那就太好了。

答案 1 :(得分:0)

正在访问$rootScope就好了。如果不是你将收到关于$ rootScope未被定义的javascript错误。相反,它将“未定义”添加到请求URL的末尾,这意味着$rootScope.token未定义。做任何你需要的事情以确保定义$rootScope.token

我怀疑在CtrlA之前调用了CtrlB,因此$rootScope.token尚未设置。