我有以下手表:
$scope.$watch('[gridService.gridOptions.pagingOptions.currentPage, gridService.gridOptions.pagingOptions.pageSize]', function (newVal, oldVal, e) {
if (newVal !== oldVal) {
$scope.search();
}
}, true);
我有两个问题:
如果pageSize更改,我想将currentPage的值设置为1.如果我这样做,我将在currentPage上触发监视。我该如何预防呢?
如何检查两者中的哪一个触发了手表?如果我想在pageSize更改时将currentPage设置为1,我需要知道pageSize触发了watch。在这种情况下,我需要两个单独的手表吗?
答案 0 :(得分:1)
结帐这些小提琴;他们都完成了你的要求,一个是复杂的手表(与你的略有不同),一个是独立的。
http://jsfiddle.net/rZxEc/→复杂观察
http://jsfiddle.net/SM5aB/→两只手表
原理相同:一个变量,用于记住页面更改是否由页面大小更改引起。封闭的匿名函数只隐藏var triggeredByPageSize
代码的其余部分:
(function() {
var triggeredByPageSize
// set $watches here
})();
我认为单独的手表(小提琴2)更清洁。
答案 1 :(得分:0)
在这里观察多个属性是需要考虑的两件事,你可以像这样传递一个字符串数组:
$scope.$watch('[someproperty,someproperty2,someproperty3]',function(new,old){
//do something
},true);
最后的“true”指定您想要深度观察一个对象,所以假设您有一个包含许多子属性的大对象,并且您希望监视父对象的任何更改,包括子属性是否更改,如果如果子属性发生变化,你就不会传递它。
你问哪个人更改了arry我相信你通过在新的结尾添加索引来访问它:
$scope.$watch('[someproperty,someproperty2,someproperty3]',function(new,old){
console.log(new[0]);
console.log(new[1]);
},true);