Javascript angularjs:多块手表

Javascript angularjs:多块手表,javascript,angularjs,Javascript,Angularjs,我有下列手表: $scope.$watch('[gridService.gridOptions.pagingOptions.currentPage, gridService.gridOptions.pagingOptions.pageSize]', function (newVal, oldVal, e) { if (newVal !== oldVal) { $scope.search(); } }, true); 我有两个问题: 如果pageSiz

我有下列手表:

 $scope.$watch('[gridService.gridOptions.pagingOptions.currentPage, gridService.gridOptions.pagingOptions.pageSize]', function (newVal, oldVal, e) {
     if (newVal !== oldVal) {
          $scope.search();
     }
 }, true);
我有两个问题:

  • 如果pageSize更改,我想将currentPage的值设置为1。如果我这样做,我会触发当前页面上的手表。我如何防止这种情况

  • 我如何检查这两者中的哪一个触发了手表?如果我想在pageSize更改时将currentPage设置为1,我需要知道pageSize触发了手表。这种情况下我需要两块手表吗


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

    → 复合表

    → 两块手表

    原理是一样的:一个变量,用于记住页面更改是否由页面大小更改引起。封闭的匿名函数仅隐藏其余代码的
    var triggeredbagesize

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

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

    观察多个属性这里有两件事要考虑:你可以通过这样的字符串数组:

    $scope.$watch('[someproperty,someproperty2,someproperty3]',function(new,old){
        //do something
    },true);
    
    末尾的“true”指定您希望深入监视对象,因此假设您有一个具有多个子属性的大型对象,并且希望监视父对象的任何更改,包括如果子属性更改,如果不传递true,则不会拾取子属性更改

    你问是哪一个改变了arry我相信你可以通过在新的

    $scope.$watch('[someproperty,someproperty2,someproperty3]',function(new,old){
        console.log(new[0]);
        console.log(new[1]);
    },true);
    

    最好有一个单独的手表,因为您的逻辑在哪个元素上发生了变化。