2014-11-24 37 views
0

下面是我通过,如果条件在下面的代码明白:这是为什么NG网分页工作

$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条件为真,所以getPagedDataAsync方法得到执行。

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

从这里,我已经采取了代码:

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

+0

您还没有提出任何实际问题。 – hon2a 2014-11-26 11:14:01

回答

0

true$watch结束表示表范围对象pagingOptions

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

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

+0

在那种情况下会使用if(newVal!== oldVal && newVal.currentPage!== oldVal.currentPage)',我们可以直接调用'getPagedDataAsync'方法。 – 2014-11-24 11:35:37

+0

是的,我认为'newVal!== oldVal'在这种情况下是多余的。或者,也许这两个条件... :) – 2014-11-24 11:56:45

0

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

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