角度范围不在观察者中更新

时间:2018-05-15 08:49:34

标签: angularjs

我有一块手表,在那块手表中,我检查了一些值,然后更新另一块。这是我的代码

 scope.$watch(function () {
 return userfactory.getUser();
 }, function (newValue, oldValue) {
 if (newValue.User) {


     scope.domainuser = newValue.User.DomainUser;
     scope.isGuardian = scope.domainuser.Category === 'Guardian';

     if (scope.isGuardian && scope.mymessage !== undefined) {
         angular.forEach(newValue.User.DependantUsers, function (value, key) {
             if (scope.mymessage.OnBehalfOf === value.DomainUser.UserName) {
                 scope.mymessage.backGround = globalColorsArray[key];

                 console.log(scope.mymessage);

             }


         });
     }
 }
 });
  

从调用指令的地方传递mymessage。如果我有一个函数可以说一个单击按钮,如果我更新它,它会更新它。

奇怪的是,控制台日志中包含更新的属性。但是在模板上它没有得到它。

我的模板有很多东西,但问题在这里

<span class="parent-child-color-scheme" ng-show="isGuardian" ng-class="mymessage.backGround"></span>

显然,如果我尝试更新任何属性,它在手表内部不起作用。它没有生效。

这就是我在指令

中的内容
return {
        restrict: 'E',
        scope: {
            mymessage: "=message",
            frontpage: "=",
            inbox: "="
        }, controller: function ($scope) {

1 个答案:

答案 0 :(得分:1)

scope函数中的watch似乎指的是与模板不同的scope.$watch(function () { return userfactory.getUser(); }, function (newValue, oldValue, scope) { ...

如果使用监视器监听器功能的完整参数列表(如here所述),则可以确保使用正确的范围:

}, function (newValue, oldValue, wScope) {
  ...
  wScope.mymessage.backGround = globalColorsArray[key];

为避免使用您的参数名称进行遮蔽,您甚至可以使用其他名称,例如:

(?<!&)(?:\b(?:nbsp|quot|divide)|#[0-9a-f]+);