【发布时间】:2014-07-22 00:18:29
【问题描述】:
我的控制器中有这个data
$scope.data = {
home: {
baseValue: "1",
name: "home"
},
contact: {
baseValue: "2",
name: "contract"
}
// a lot more options
};
有一些像这样的html:
<section class="content row" ng-repeat="item in data">
{{item.name}}
....
</section>
现在,我想知道 baseValue 何时更改,但由于我在数据变量中使用了对象,我无法以更简单的方式 watch 属性。
我尝试过类似的方法,但我必须循环所有数组
$scope.$watch('data', function (newValue, oldValue, scope) {
// some code to compare the tow arrays, line by line
}, true);
如何做一个更简单的$watch 以仅知道baseValue 何时更改?
类似问题:
- AngularJS watch array of objects for data change
- How to get an object that was changed in angularjs?
- How to deep watch an array in angularjs?
更新 1
我可以为每个对象添加一个单独的手表,以了解 baseValue 何时更改,但如果我有一个 n 数量的对象,而不仅仅是本示例中的几个对象,那就不好了
$scope.$watch('data.home', function (newValue, oldValue, scope) {
// do some stuff with newvalue.baseValue
}, true);
$scope.$watch('data.contact', function (newValue, oldValue, scope) {
// do some stuff with newvalue.baseValue
}, true);
... // Adds more individual `watch`
【问题讨论】:
-
您只想知道
baseValue何时发生变化,但又不想为其添加单独的手表? -
关于你的更新1,你能定义“不好”吗?
-
使用property descriptors,然后回退到
*Timeout怎么样? -
你需要知道旧值吗?或者您只需要注意变化?
-
还是 $watchGroup ? $watch() 的一个变体,它监视一组 watchExpressions。如果集合中的任何一个表达式发生更改,则执行侦听器。
标签: javascript angularjs