我有以下$ rootScope变量,我用它来保存当前登录的用户权限级别,然后我从其他控制器访问此变量。有没有办法我可以观察rootScope变量的变化,以便更新控制器特定变量与根范围变量的任何更改?下面是我目前使用的代码,有人可以告诉我我做错了什么以及如何解决它?感谢
在.run下的app.js中:
$rootScope.uPLevel = 0;
.controller
$scope.$watch($rootScope.uPLevel, function() {
$scope.userPLevel = $rootScope.uPLevel;
}, true);
答案 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。$表壳中,手表永远保持不变。