2016-12-13 1 views
0

Ich muss eine Funktion aufrufen jedes Mal ng-repeat hat das Rendern einer Ansicht beendet. Eine einfache Lösung für den Fall, dass ng-repeat zum ersten Mal gerendert wird, ist die Verwendung von ng-init="$last ? function() : angular.noop, wobei "function" die Funktion ist, die aufgerufen werden soll.AngularJS - Erkenne Abschluss-Ereignis jedes Mal, wenn ng-repeat erneut gerendert wird

Ebenso könnte man eine benutzerdefinierte Direktive wie z.B. in ng-repeat finish event Bisher war es jedoch nicht erfolgreich, eine Lösung zu finden, die auch funktioniert, wenn ich eine dynamische ng-Wiederholung habe, z. wenn Elemente in der Mitte hinzugefügt oder gelöscht werden oder wenn sie als $ last gefiltert werden, ist dies in diesen Fällen falsch. Man könnte immer einen Dummy-Eintrag am Ende der Liste hinzufügen und löschen, aber das scheint keine richtige Lösung zu sein.

Alle Vorschläge sind willkommen. Vielen Dank.

+0

setzen, was Sie in einer Richtlinie und Ihre Logik innerhalb der Controller Konstrukteurs-Richtlinie wiederholen – JMK

Antwort

0

Nach den Empfehlungen von JMK (danke dafür) habe ich folgendes getan, das scheint zu funktionieren, sieht aber ein bisschen naiv aus - also sind alle Verbesserungsvorschläge willkommen. Die Direktive ruft am Anfang und am Ende des Renderings zwei verschiedene Funktionen auf.

HTML

<div ng-repeat="item in itemsArray" on-finish-render="{items: itemsArray}"> 
    {{item}} 
</div> 

JS

.directive("onFinishRender", ["$parse", "$timeout", function ($parse, $timeout) {  
     return { 
      restrict: "A", 
      link: function (scope, element, attr) { 
       var model = $parse(attr.onFinishRender); 
       scope.$watch(model, function (newValue, oldValue) {       
        if (scope.$index === 0) { 
         //At the start do stuff 
        } 
        if (scope.$index === newValue.items.length - 1) { 
         //At the end do some other stuff 
        } 
       }, true); 
      } 
     }; 
    }]); 
Verwandte Themen