Jeśli istnieje sposób w ui-grid, że mogę wiedzieć, że siatka kończy aktualizowanie wierszy (tak jak filtr jest stosowany itp.)? Chcę uruchomić jakąś funkcję po zmianach widoku siatki.Jak otrzymać powiadomienie o zmianie siatki w systemie AngularJS ui-grid?
Próbowałem następujące metody:
$scope.filteredRows = $scope.gridApi.core.getVisibleRows($scope.gridApi.grid);
$scope.$watch('filteredRows', function(){console.log('view updated');});
Powyższe podejście działa, gdy tylko zakończy inicjowanie siatki, po tym, że nie będzie już pracować.
Próbowałem też za pomocą filterChanged
API:
$scope.gridApi.core.on.filterChanged($scope, function() {
console.log('filter changed');
foo();
});
Problem z tej metody jest to, że chociaż mogę otrzymywać powiadomienia, gdy filtr zostanie zmieniona, ale jeśli siatka jest bardzo duży, potrzebuje trochę czasu Zakończ aktualizowanie widoku, a przed nim funkcja foo()
jest wywoływana przed zakończeniem aktualizacji siatki.
Każdy pomysł zostanie doceniony.
Zaktualizowany w edycji, aby pokazać, jak z niego korzystać – PaulL
Dziękuję @PauL, to działa! Pytanie uzupełniające, w jaki sposób pozwolić funkcji myFunction() wykonywać tylko po wprowadzeniu tekstu filtru i renderowaniu siatki. Teraz mojaFunkcja() będzie wykonywana za każdym razem, gdy zmieni się siatka, podobnie jak w grupowaniu, rozwijaniu i zwijaniu siatka będzie również wywoływała funkcję myFunction(). Jeszcze raz dziękuję za poświęcony czas. – Tony
Można również wykryć filterChanged i ustawić flagę + limit czasu, który zresetuje tę flagę. Następnie możesz sprawdzić tę flagę w rowsRendered. Alternatywnie możesz po prostu nie martwić się i pozwolić swojej funkcji działać, gdy emitowany jest rowsRendered. – PaulL