Comment faire pour être averti lorsque la grille changé dans AngularJS de l'interface utilisateur-réseau?
Si il y a un moyen de l'interface utilisateur-réseau que je peux savoir d'une grille est de finir de mettre à jour les lignes?(comme un filtre est appliqué, etc)? Je veux exécuter une fonction après l'affichage de la grille des changements.
J'ai essayé la méthode suivante:
$scope.filteredRows = $scope.gridApi.core.getVisibleRows($scope.gridApi.grid);
$scope.$watch('filteredRows', function(){console.log('view updated');});
L'approche ci-dessus fonctionne lorsque la grille de finition initier, d'après cela, il ne fonctionne plus.
J'ai aussi essayé d'utiliser le filterChanged
api:
$scope.gridApi.core.on.filterChanged($scope, function() {
console.log('filter changed');
foo();
});
Le problème avec cette méthode est que, même si je peux être averti quand le filtre est changé, mais si la grille est très grand, il a besoin de quelque temps pour terminer la mise à jour de la vue, et avant cela, la fonction foo()
est appelé avant que la grille mise à jour est terminée.
Toute idée sera appréciée.
Vous devez vous connecter pour publier un commentaire.
J'ai vu l'utilisation de
$scope.grid.api.core.on.rowsRendered( $scope, $scope.col.updateAggregationValue );
dans ui-grid-footer-cell.js. Je ne sais pas exactement quand rowsRendered incendies, mais étant donné qu'elle est utilisée pour calculer des agrégations et des agrégations nécessitent des connaissances chaque fois que les lignes sont modifiées, et doit courir après le rowsProcessors terminer l'exécution, il ya une bonne chance que c'est ce que vous voulez.EDIT: le cadre de l'utiliser serait:
Définir une fonction que vous voulez l'appeler lorsque les lignes visibles ont changé
var myFunction = function() {
do some stuff
};
Définir cette fonction est appelée à chaque fois que les lignes sont rendus
$scope.gridApi.core.on.rowsRendered( $scope, myFunction );
Bien, j'ai trouvé une solution de contournement, afin d'appeler la fonction après la grille est mise à jour, ce qui prend un certain temps, j'ai ajouté un retard dans
filterChanged
événement:D'utiliser le
$timeout
, vous devez l'ajouter à votre contrôleur de premier.