为什么这个ng-grid分页工作正常

时间:2014-11-24 11:09:54

标签: 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.currentPage) {
          $scope.getPagedDataAsync($scope.pagingOptions.pageSize, $scope.pagingOptions.currentPage, $scope.filterOptions.filterText);
    }
}, true);

只要pagingOptions更改 currentPage属性发生更改,if条件就会变为true,因此getPagedDataAsync方法会被执行。< / p>

但即使我不从UI更改currentPage而是更改pageSize,网格也会刷新。 根据我的理解,我不希望发生这种情况。那么为什么网格会刷新?

从这里开始,我接受了代码:

http://angular-ui.github.io/ng-grid/ 使用服务器端分页示例标题

3 个答案:

答案 0 :(得分:0)

true末尾的$watch表示范围对象pagingOptions监视。

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

$watch和第三个参数[objectEquality]的文档为here

答案 1 :(得分:0)

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

$scope.$watch('pagingOptions', function () {
      $scope.getPagedDataAsync($scope.pagingOptions.pageSize, $scope.pagingOptions.currentPage, $scope.filterOptions.filterText);
}, true);

答案 2 :(得分:0)

再添加一个手表

$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);