Javascript 为什么这是ng网格分页工作
以下是我对以下代码中if条件的理解: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
$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
是多余的。或者可能两种情况都有……:)你没有问任何实际问题。