$watch 不触发带有美元 ($) 的变量

$watch not firing on variables with a dollar ($)

我有一个对象的手表。当对象的 属性 发生变化时,手表会触发,除非 属性 名称以美元 ($).

开头

考虑这段代码:

$scope.data = {};

$scope.$watch('data', function (newValue, oldValue) {
        console.log('fired', newValue);
    }, true);

和html:

<div>
this will fire the event
<input type="text" ng-model="data.x" />
</div>
<div>
this won't
<input type="text" ng-model="data.$" />
</div>

你可以在这个 fiddle 中亲眼看到: https://jsfiddle.net/gtrwzsn1/179/

这对我来说非常重要,因为我必须使用带 $ 的 属性 名称进行过滤。

AngularJs 具有“$watchCollection”函数作为观察集合(即数组或对象)变化的一种方式。

$scope.$watchCollection('data', function (newValue, oldValue) {
  console.log('fired', newValue);
});

请尝试上面的代码片段,因为你想观看一个对象。希望这有帮助。