【问题标题】:AngularJS - Cannot access RootScopeAngularJS - 无法访问 RootScope
【发布时间】:2013-01-07 18:33:28
【问题描述】:

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

无法运行...

【问题讨论】:

  • 你的 Plunker 很长。你能把它简化成 skosh 让它更容易玩吗?

标签: javascript controller scope angularjs


【解决方案1】:

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

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

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

【讨论】:

  • 嘿,谢谢。请参阅我的第一篇文章中的更新。我对 AngularJS 很陌生。也许有可能优化我的 app.js
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    相关资源
    最近更新 更多