0

我有以下手表:

 $scope.$watch('[gridService.gridOptions.pagingOptions.currentPage, gridService.gridOptions.pagingOptions.pageSize]', function (newVal, oldVal, e) {
     if (newVal !== oldVal) {
          $scope.search();
     }
 }, true);

我有两个问题:

  1. 如果 pageSize 发生变化,我想将 currentPage 的值设置为 1。如果这样做,我将在 currentPage 上触发监视。我该如何防止呢?

  2. 如何检查两者中的哪一个触发了手表?如果我想在 pageSize 发生变化时将 currentPage 设置为 1,我需要知道 pageSize 触发了手表。在这种情况下我需要两个单独的手表吗?

4

2 回答 2

1

检查这些小提琴;他们都完成了你的要求,一个是复杂的手表(与你的略有不同),一个是单独的。

http://jsfiddle.net/rZxEc/ → 复杂的手表

http://jsfiddle.net/SM5aB/ → 两只手表

原理是一样的:一个变量,记住页面变化是否是由页面大小变化引起的。封闭的匿名函数只是var triggeredByPageSize被其余代码隐藏:

(function() {
    var triggeredByPageSize
    // set $watches here
})();

我认为单独的手表(小提琴 2)更干净。

于 2013-09-26T07:17:19.263 回答
0

在这里查看多个属性需要考虑两件事,您可以像这样传递一个字符串数组:

$scope.$watch('[someproperty,someproperty2,someproperty3]',function(new,old){
    //do something
},true);

最后的“true”指定您想要深入观察一个对象,所以假设您有一个带有许多子属性的大对象,并且您想观察对父对象的任何更改,包括如果您不这样做,子属性是否会更改t 传递 true 如果子属性发生更改,它不会拾取。

您问是哪一个更改了数组,我相信您可以通过在 new 末尾添加索引来访问它:

$scope.$watch('[someproperty,someproperty2,someproperty3]',function(new,old){
    console.log(new[0]);
    console.log(new[1]);
},true);
于 2013-09-26T07:25:52.650 回答