AngularJS $监视更改的根范围变量

时间:2014-03-29 23:55:35

标签: angularjs

我有以下$ rootScope变量,我用它来保存当前登录的用户权限级别,然后我从其他控制器访问此变量。有没有办法我可以观察rootScope变量的变化,以便更新控制器特定变量与根范围变量的任何更改?下面是我目前使用的代码,有人可以告诉我我做错了什么以及如何解决它?感谢

在.run下的app.js中:

 $rootScope.uPLevel = 0;

.controller

   $scope.$watch($rootScope.uPLevel, function() {
            $scope.userPLevel = $rootScope.uPLevel;
   }, true);

2 个答案:

答案 0 :(得分:51)

$watch的第一个参数应该是字符串或函数(docs)。现在,您在控制器初始化时将$rootScope.uPLevel的值传递给它。

$scope.$watch(function() {
  return $rootScope.uPLevel;
}, function() {
  $scope.userPLevel = $rootScope.uPLevel;
}, true);

两个旁注:

  • 将此值存储在服务中而不是$rootScope
  • 可能是谨慎的做法
  • 如果uPLevel只是一个整数(如您的示例所示),那么您不需要将true作为第三个参数传递 - 这仅适用于数组和对象。如果您确实想要观看收藏集,那么我建议您使用$watchCollection

答案 1 :(得分:24)

我建议像这样观看$ rootScope变量:

$scope.$watch('$root.uPLevel', function() {
    $scope.userPLevel = $rootScope.uPLevel;
});

这样,当前指令/控制器被销毁。它也清除了手表。在$ rootScope。$表壳中,手表永远保持不变。