Javascript 如何在AngularJS ui网格中更改网格时获得通知?

Javascript 如何在AngularJS ui网格中更改网格时获得通知?,javascript,angularjs,angular-ui-grid,Javascript,Angularjs,Angular Ui Grid,如果在ui网格中有一种方法可以让我知道网格正在完成行的更新?(比如应用过滤器等等)?我想在网格视图更改后运行一些函数 我尝试了以下方法: $scope.filteredRows = $scope.gridApi.core.getVisibleRows($scope.gridApi.grid); $scope.$watch('filteredRows', function(){console.log('view updated');}); 当网格刚刚完成初始化时,上述方法就起作用了,之后,它就

如果在ui网格中有一种方法可以让我知道网格正在完成行的更新?(比如应用过滤器等等)?我想在网格视图更改后运行一些函数

我尝试了以下方法:

$scope.filteredRows = $scope.gridApi.core.getVisibleRows($scope.gridApi.grid);

$scope.$watch('filteredRows', function(){console.log('view updated');});
当网格刚刚完成初始化时,上述方法就起作用了,之后,它就不再起作用了

我还尝试使用
filterChanged
api:

$scope.gridApi.core.on.filterChanged($scope, function() {
    console.log('filter changed');
    foo();
});
此方法的问题是,虽然在更改过滤器时可以收到通知,但如果网格非常大,则需要一些时间来完成视图更新,在此之前,在网格更新完成之前调用函数
foo()


任何想法都将不胜感激

我已经看到,
$scope.grid.api.core.on.rowsRendered($scope,$scope.col.updateAggregationValue)的使用。我不确定rowsRendered何时触发,但考虑到它被用于计算聚合,并且每当行发生更改时聚合都需要知识,并且必须在RowsProcessor完成运行后运行,因此很有可能这就是您想要的

编辑:使用它的框架是:

  • 定义要在可见行发生更改时调用的函数

    var myFunction=function(){
    做点什么
    };

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

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


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

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

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

    谢谢你@PauL,这很有效!接下来的问题是,如何让myFunction()仅在输入过滤文本并完成网格渲染时执行。现在,每当网格发生更改时,都会执行myFunction(),例如在分组、展开和折叠中,网格也会触发myFunction()。再次感谢您的时间。您还可以侦听filterChanged,您可以设置一个标志+一个将取消设置该标志的超时。然后你可以在rowsRendered中查看该标志。或者,您可以不必担心,只要发出rowsRendered,就让函数运行。