如何在 AngularJS ui-grid 中更改网格时得到通知?
How to get notified when grid changed in AngularJS ui-grid?
如果 ui-grid 中有一种方法我可以知道网格正在完成行更新?(比如正在应用过滤器等)?我想在网格视图更改后 运行 一些功能。
我尝试了以下方法:
$scope.filteredRows = $scope.gridApi.core.getVisibleRows($scope.gridApi.grid);
$scope.$watch('filteredRows', function(){console.log('view updated');});
上面的方法在grid刚初始化完成的时候有效,之后就不行了。
我也试过使用 filterChanged
api:
$scope.gridApi.core.on.filterChanged($scope, function() {
console.log('filter changed');
foo();
});
这个方法的问题是虽然我可以在过滤器改变时得到通知,但是如果网格很大,它需要一些时间来完成视图的更新,而在此之前,函数foo()
在网格更新完成之前被调用。
任何想法将不胜感激。
我在 ui-grid-footer-cell.js 中看到了 $scope.grid.api.core.on.rowsRendered( $scope, $scope.col.updateAggregationValue );
的使用。我不确定 rowsRendered 何时触发,但考虑到它被用于计算聚合和聚合 require 知识,只要行发生更改,并且必须 运行 在 rowsProcessors 完成后 运行 ning,很有可能是你想要的。
编辑:使用它的框架是:
定义一个要在可见行发生变化时调用的函数
var myFunction = function() {
do some stuff
};
将此函数设置为在呈现行时调用
$scope.gridApi.core.on.rowsRendered( $scope, myFunction );
好吧,我找到了一个解决方法,为了在网格更新后调用该函数,这需要一些时间,我在 filterChanged
事件中添加了一个延迟:
$scope.gridApi.core.on.filterChanged($scope, function() {
console.log('filter changed');
$timeout(foo(),800);
});
要使用 $timeout
,您需要先将其添加到您的控制器。
如果 ui-grid 中有一种方法我可以知道网格正在完成行更新?(比如正在应用过滤器等)?我想在网格视图更改后 运行 一些功能。
我尝试了以下方法:
$scope.filteredRows = $scope.gridApi.core.getVisibleRows($scope.gridApi.grid);
$scope.$watch('filteredRows', function(){console.log('view updated');});
上面的方法在grid刚初始化完成的时候有效,之后就不行了。
我也试过使用 filterChanged
api:
$scope.gridApi.core.on.filterChanged($scope, function() {
console.log('filter changed');
foo();
});
这个方法的问题是虽然我可以在过滤器改变时得到通知,但是如果网格很大,它需要一些时间来完成视图的更新,而在此之前,函数foo()
在网格更新完成之前被调用。
任何想法将不胜感激。
我在 ui-grid-footer-cell.js 中看到了 $scope.grid.api.core.on.rowsRendered( $scope, $scope.col.updateAggregationValue );
的使用。我不确定 rowsRendered 何时触发,但考虑到它被用于计算聚合和聚合 require 知识,只要行发生更改,并且必须 运行 在 rowsProcessors 完成后 运行 ning,很有可能是你想要的。
编辑:使用它的框架是:
定义一个要在可见行发生变化时调用的函数
var myFunction = function() { do some stuff };
将此函数设置为在呈现行时调用
$scope.gridApi.core.on.rowsRendered( $scope, myFunction );
好吧,我找到了一个解决方法,为了在网格更新后调用该函数,这需要一些时间,我在 filterChanged
事件中添加了一个延迟:
$scope.gridApi.core.on.filterChanged($scope, function() {
console.log('filter changed');
$timeout(foo(),800);
});
要使用 $timeout
,您需要先将其添加到您的控制器。