首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改的AngularJS $watch根范围变量

更改的AngularJS $watch根范围变量
EN

Stack Overflow用户
提问于 2014-03-30 07:55:35
回答 2查看 50.7K关注 0票数 33

我有以下$rootScope变量,我用它来保存当前登录的用户特权级别,然后我从其他控制器访问这个变量。有没有一种方法可以观察rootScope变量的变化,以便用根作用域变量的任何变化更新控制器特定的变量?下面是我目前正在使用的代码,有人能告诉我我做错了什么以及如何修复它吗?谢谢

在.run下的app.js中:

代码语言:javascript
复制
 $rootScope.uPLevel = 0;

.controller

代码语言:javascript
复制
   $scope.$watch($rootScope.uPLevel, function() {
            $scope.userPLevel = $rootScope.uPLevel;
   }, true);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-30 07:57:10

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

代码语言:javascript
复制
$scope.$watch(function() {
  return $rootScope.uPLevel;
}, function() {
  $scope.userPLevel = $rootScope.uPLevel;
}, true);

两个附注:

将此值存储在服务中而不是$rootScope.

  • If中可能是明智的做法。
  • uPLevel只是一个整数(如您的示例所示),这样您就不需要将true作为第三个参数传递--这只适用于数组和对象。如果你确实想看一个收藏,那么我建议你用$watchCollection代替。
票数 61
EN

Stack Overflow用户

发布于 2015-12-14 00:34:37

我推荐这样观察$rootScope变量:

代码语言:javascript
复制
$scope.$watch('$root.uPLevel', function() {
    $scope.userPLevel = $rootScope.uPLevel;
});

这样,当当前指令/控制器被破坏时。它也能清空手表。在$rootScope.$watch的情况下,手表永远保持不变。

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22738482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档