奇怪的问题, 我无法访问在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
它无法运行......
答案 0 :(得分:2)
这里有两个关键问题:第一,当你应该使用服务时使用$ rootScope;第二,你假设执行控制器的顺序。如果只是第二个问题,您可以设置$ watch命令来监视更改,以确保您的第二个控制器具有更新值,无论何时设置。
但是你不应该污染全球范围。将您的令牌包装到可以注入的服务中,您可以在其中监视更改。也就是说,我不能发布任何更具体的内容(即代码)而不知道你的控制器在什么情况下运行。
但我希望这会有所帮助!如果您愿意,可以使用更多信息更新您的帖子,我会深入了解一下。实际上,如果你能创建一个我可以直接修改的Plunker或jsFiddle,那就太好了。
答案 1 :(得分:0)
正在访问$rootScope
就好了。如果不是你将收到关于$ rootScope未被定义的javascript错误。相反,它将“未定义”添加到请求URL的末尾,这意味着$rootScope.token
未定义。做任何你需要的事情以确保定义$rootScope.token
。
我怀疑在CtrlA之前调用了CtrlB,因此$rootScope.token
尚未设置。