如何在 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,很有可能是你想要的。

编辑:使用它的框架是:

  1. 定义一个要在可见行发生变化时调用的函数

    var myFunction = function() { do some stuff };

  2. 将此函数设置为在呈现行时调用

    $scope.gridApi.core.on.rowsRendered( $scope, myFunction );

好吧,我找到了一个解决方法,为了在网格更新后调用该函数,这需要一些时间,我在 filterChanged 事件中添加了一个延迟:

$scope.gridApi.core.on.filterChanged($scope, function() {
    console.log('filter changed');
    $timeout(foo(),800);
});

要使用 $timeout,您需要先将其添加到您的控制器。