ng-repeat Ende-Ereignis
Möchte ich nennen, einige jQuery-Funktion targeting div mit Tabelle. Diese Tabelle wird aufgefüllt, mit ng-repeat
.
Wenn ich es auf
$(document).ready()
Habe ich kein Ergebnis.
Auch
$scope.$on('$viewContentLoaded', myFunc);
nicht helfen.
Gibt es eine Möglichkeit, um die Funktion ausführen direkt nach ng-repeat Bevölkerung abgeschlossen? Ich habe gelesen, dass ein Gutachten über die Verwendung von benutzerdefinierten directive
aber ich habe keine Ahnung, wie es mit ng-repeat und div...
InformationsquelleAutor der Frage ChruS | 2012-11-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Tat, sollten Sie Richtlinien, und es gibt kein Ereignis, gebunden an das Ende eines ng-Repeat-Schleife (wie jedes element wird individuell gefertigt, und hat es ist eigenes event). Aber a) die Verwendung von Richtlinien mag alles, was Sie brauchen, und b) gibt es ein paar ng-Repeat spezifische Eigenschaften, die Sie verwenden können, um Ihr "auf ngRepeat fertig" - Ereignis.
Speziell, wenn alle Sie wollen, ist Stil, hinzufügen von Ereignissen, die für die gesamte Tabelle, die Sie tun können, damit die Anwendung in einer Richtlinie, die alle umfasst, die ngRepeat-Elemente. Auf der anderen Seite, wenn Sie wollen, um jedes element spezifisch sind, können Sie mithilfe einer Richtlinie innerhalb der ngRepeat, und es wird auf jedes element, nachdem es erstellt wurde.
Dann gibt es die
$index
$first
$middle
und$last
Eigenschaften, die Sie verwenden können, um Ereignisse auszulösen. Also, für dieses HTML:Können Sie die Richtlinien wie folgt:
Sehen, Sie in Aktion in diesem Plunker. Hoffe, es hilft!
InformationsquelleAutor der Antwort Tiago Roldão
Wenn Sie wollen einfach nur zum ausführen von code an das Ende der Schleife, hier eine etwas einfachere Variante, erfordert keine zusätzlichen event-handling:
InformationsquelleAutor der Antwort karlgold
Gibt es keine Notwendigkeit für die Schaffung einer Richtlinie vor allem zu haben, nur um ein
ng-repeat
complete-Ereignis.ng-init
ist die Magie für Sie.den
$last
stellt sicher, dassfinished
nur gefeuert wird, wenn das Letzte element gerendert wurde, um den DOM.Vergessen Sie nicht, erstellen Sie
$scope.finished
Veranstaltung.Happy Coding!!
ÄNDERUNG: 23 Okt 2016
Falls Sie auch möchten, rufen Sie die
finished
- Funktion wenn kein Element im array dann können Sie auf die folgenden AbhilfeNur fügen Sie die Zeile oben auf der Spitze des
ng-repeat
element. Es wird überprüft, ob das array wird nicht mit jedem Wert, und rufen Sie die Funktion entsprechend.E. g.
InformationsquelleAutor der Antwort Vikas Bansal
Hier ist eine wiederholen-fertig-Richtlinie, die fordert, eine bestimmte Funktion bei true. Ich habe festgestellt, dass die genannte Funktion verwenden müssen, $timeout-Intervall=0 vor DOM-manipulation, wie das initialisieren tooltips auf der gerenderten Elemente. jsFiddle: http://jsfiddle.net/tQw6w/
In $scope.layoutDone, versuchen auskommentieren der $timeout-Linie und die Kommentarzeichen vor dem "NICHT KORREKT!" - Zeile zu sehen, der Unterschied in den QuickInfos.
JS:
InformationsquelleAutor der Antwort Joseph Oster
Hier ist ein einfacher Ansatz mit
ng-init
ist das gar nicht erfordern eine benutzerdefinierte Richtlinie. Es funktionierte gut für mich in bestimmten Szenarien, z.B. benötigen, um auto-scroll a div ng-wiederholte Elemente um ein bestimmtes Element auf der Seite geladen, so dass die Scroll-Funktion muss warten, bis dieng-repeat
fertig Rendern in den DOM, bevor es feuern kann.Beachten Sie, dass dies nur nützlich für Funktionen, die Sie aufrufen müssen, eine Zeit nach der ng-repeat-macht zunächst. Wenn Sie brauchen, um eine Funktion aufzurufen, wenn der ng-repeat-Inhalte aktualisiert werden, dann haben Sie, um verwenden Sie eine der anderen Antworten in diesem thread mit einer benutzerdefinierten Richtlinie.
InformationsquelleAutor der Antwort dshap
Ergänzt Pavel ist Antwortlesbarer und leicht verständlicher wäre:
Warum sonst denkst du
angular.noop
ist es in Erster Linie...?Vorteile:
Sie nicht haben, um schreiben Sie eine Richtlinie für diese...
InformationsquelleAutor der Antwort deostroll
Vielleicht ein bisschen einfacher Ansatz mit
ngInit
und Lodash istdebounce
Methode, ohne die Notwendigkeit von benutzerdefinierten Richtlinie:Controller:
Vorlage:
Update
Es ist sogar einfacher, Reine AngularJS-Lösung mit ternärer operator:
Vorlage:
Sich bewusst sein, dass ngInit verwendet pre-link-compilation-phase, d.h. der Ausdruck wird aufgerufen, bevor eine untergeordnete Richtlinien verarbeitet werden. Dies bedeutet, dass noch eine asynchrone Verarbeitung erforderlich sein könnte.
InformationsquelleAutor der Antwort Pavel Horal
Kann es auch notwendig sein, wenn Sie überprüfen Sie die
scope.$last
variable wickeln Sie Ihre trigger mit einemsetTimeout(someFn, 0)
. EinsetTimeout 0
ist eine akzeptierte Technik, die in javascript, und es war zwingend erforderlich für meinedirective
richtig laufen.InformationsquelleAutor der Antwort Cody
Dies ist eine Verbesserung der ausgedrückten Ideen in anderen Antworten, um zu zeigen, wie Sie Zugang zu der ngRepeat-Eigenschaften ($index, $first, $Mitte $Letzte, $auch, $ungerade), wenn die durch deklarative syntax und isolieren Umfang (Google empfohlenen best practice) mit einem element-Richtlinie. Hinweis: der hauptsächliche Unterschied:
scope.$parent.$last
.InformationsquelleAutor der Antwort JoshuaDavid
ich möchte noch eine weitere Antwort, da die vorhergehenden Antworten dauert es, dass der code, der benötigt wird, um laufen nach der ngRepeat geschehen ist, ist ein Winkel-code, die in diesem Fall alle oben genannten Antworten geben eine tolle und einfache Lösung, einige mehr generische als andere, und im Falle seiner wichtig die digest-life-cycle-Stadium können Sie einen Blick auf Ben Nadel s blog über Sie, mit Ausnahme der Verwendung von $parse-statt $eval.
aber in meiner Erfahrung, wie die OP Staaten von Amerika, in der Regel laufen einige JQuery-plugins oder Methoden, die auf finnaly zusammengestellt DOM, der in diesem Fall fand ich, dass die einfachste Lösung ist zum erstellen einer Richtlinie mit einem setTimeout, da die setTimeout-Funktion wird geschoben, um das Ende der Warteschlange der browser immer direkt nach alles getan wird, im Winkel, in der Regel ngReapet, die weiterhin nach seinen Eltern postLinking Funktion
dafür, wer auch immer darüber gewundert, dass in diesem Fall, warum nicht verwenden, $timeout ist, dass es bewirkt, dass andere digest-Zyklus, der vollkommen unnötig ist
InformationsquelleAutor der Antwort bresleveloper
Habe ich es auf diese Weise.
Erstellen der Richtlinie
Nachdem Sie fügen Sie es auf das Etikett, wo diese ng-repeat
Fertig und mit, dass am Ende der ng-repeat.
InformationsquelleAutor der Antwort Mvochoa
Meine Lösung war es, fügen Sie ein div, um eine Funktion aufzurufen, wenn der Artikel war der Letzte in einer Wiederholung.
InformationsquelleAutor der Antwort scotty3
Hatte ich zum Rendern von Formeln mit MathJax nach ng-repeat endet, keine der oben genannten Antworten ist mein problem gelöst, also machte ich wie unten. Es ist keine schöne Lösungaber für mich gearbeitet...
InformationsquelleAutor der Antwort João Paulo
Ich eine Antwort gefunden hier gut geübt, aber es war immer noch notwendig, um eine Verzögerung
Erstellen Sie die folgende Richtlinie:
Fügen Sie es zu Ihrem repeater als ein Attribut, wie hier:
Laut Radu:
Bei mir klappt es, aber ich muss noch hinzufügen setTimeout
InformationsquelleAutor der Antwort Blomersi
Wenn Sie einfach nur will das ändern den Namen der Klasse, wird es so gerendert anders, der folgende code würde den trick tun.
Dieser code war für mich, wenn ich hatte eine ähnliche Anforderung zu erbringen, die eingekauft Punkt in meiner shopping-Liste in Strick-Trog schriftart.
InformationsquelleAutor der Antwort user4808836