以下是我在以下代码中的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/ 使用服务器端分页示例标题
答案 0 :(得分:0)
true
末尾的$watch
表示范围对象pagingOptions
的深监视。
因此,如果传递true
作为可选的第三个参数,Angular将进行深度相等检查。因此,将检查pageSize
属性是否相等并且不同。
$watch
和第三个参数[objectEquality]
的文档为here。
答案 1 :(得分:0)
提供的代码似乎包含不必要的复杂性。在执行"object equality watch"时(通过将$watch
的第三个参数设置为true
),将比较对象的属性值而不是对象引用。如果我们假设pageSizes
属性值永远不会更改,则手表会正确通知我们,并且只会更改pageSize
和currentPage
值。因此,内部需要的唯一代码是调用页面刷新:
$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);