3

奇怪的问题,我无法访问在 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

跑不动了……

4

2 回答 2

2

这里有两个关键问题:首先,您在应该使用服务时使用了 $rootScope,其次,您假设了控制器的执行顺序。如果只是一秒钟的事情,您可以设置 $watch 命令来监视更改,以确保您的第二个控制器在设置时具有更新的值。

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

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

于 2013-01-07T19:23:47.283 回答
0

它访问$rootScope就好了。如果不是,您将收到有关 $rootScope 未定义的 javascript 错误。相反,它将“未定义”附加到请求 URL 的末尾,意思$rootScope.token是未定义。做任何你需要确保$rootScope.token定义的事情。

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

于 2013-01-07T18:58:14.923 回答