Javascript 为什么这是ng网格分页工作

Javascript 为什么这是ng网格分页工作,javascript,angularjs,ng-grid,angularjs-watch,Javascript,Angularjs,Ng Grid,Angularjs Watch,以下是我对以下代码中if条件的理解: $scope.pagingOptions = { pageSizes: [250, 500, 1000], pageSize: 250, currentPage: 1 }; $scope.$watch('pagingOptions', function (newVal, oldVal) { if (newVal !== oldVal && newVal.currentPage !== oldVal.curre

以下是我对以下代码中if条件的理解:

$scope.pagingOptions = {
    pageSizes: [250, 500, 1000],
    pageSize: 250,
    currentPage: 1
};

$scope.$watch('pagingOptions', function (newVal, oldVal) {
    if (newVal !== oldVal && newVal.currentPage !== oldVal.currentPage) {
          $scope.getPagedDataAsync($scope.pagingOptions.pageSize, $scope.pagingOptions.currentPage, $scope.filterOptions.filterText);
    }
}, true);
每当
pagingOptions
更改
currentPage
属性更改时,如果
条件变为true,则执行
getPagedDataAsync
方法

但是,即使我没有从UI中更改
currentPage
而是
pageSize
,网格也会被刷新。 这是我不希望发生的(根据我的理解)。那么为什么网格会被刷新呢

从这里,我得到了代码:


对于服务器端分页示例标题

而言,
$watch
末尾的
true
表示对作用域对象
分页选项进行深度监视

因此,如果将
true
作为可选的第三个参数传入,Angular将执行深度相等检查。因此,
pageSize
属性将被检查是否相等,是否不同


$watch
和第三个参数
[objectEquality]
的文档是。

提供的代码似乎包含不必要的复杂性。执行操作时(通过将
$watch
的第三个参数设置为
true
),将比较对象的属性值,而不是对象引用。如果我们假设
pageSizes
属性值从未更改,则手表会正确地通知我们
pageSize
currentPage
值的更改。因此,内部需要的唯一代码是调用页面刷新:

$scope.$watch('pagingOptions', function () {
      $scope.getPagedDataAsync($scope.pagingOptions.pageSize, $scope.pagingOptions.currentPage, $scope.filterOptions.filterText);
}, true);
再加一块手表

$scope.$watch('pagingOptions.pageSize', function (newVal, oldVal) {
 if (newVal !== oldVal && newVal.currentPage !== oldVal.currentPage) {
      $scope.getPagedDataAsync($scope.pagingOptions.pageSize, $scope.pagingOptions.currentPage, $scope.filterOptions.filterText);
    }
}, true);

在这种情况下,
如果(newVal!==oldVal&&newVal.currentPage!==oldVal.currentPage)
,我们可以直接调用
getPagedDataAsync
方法。是的,我认为
newVal!==在这种情况下,oldVal
是多余的。或者可能两种情况都有……:)你没有问任何实际问题。