2016-03-30 2 views
1

Ich versuche, eine virtuelle Scrollbaum-Direktive in Angular using this guide as a reference zu implementieren. Wenn ich mit dem Scrollen anfange, explodiert die $ Watcher-Zählung jedoch zu 17k-20k + Beobachtern (was die Seite zum Absturz bringt), das Scrollen ist durchgängig langsam und nichts, was ich versucht habe, scheint mir zu helfen.

Plunker mit meinem aktuellen Code: HERE

(Hinweis, oben nicht für mich in Firefox zeigt, aber funktioniert in Chrome). Wenn Sie darüber nachdenken, was ich sonst noch versuchen kann, ist das Scrollen keine Katastrophe, ich bin offen für Ideen. Arbeitet auch auf diese Art und Weise für lange ...

Andere Methoden, die ich versucht habe:

$compile(element.components())(scope.$new())

in OnScroll genannt wurde(). Ergebnis: Die Liste wurde überhaupt nicht mehr angezeigt/lag immer noch schlecht und ich bekam fortwährend "Fehler beim Aufruf der Methode 'insertBefore' von null auf $ compile" -Fehler, bis die Seite abstürzte.

<li ng-repeat="node in nodeList" vs-node="node"></li>

Aka, habe ich versucht, jedes Element einen isolierten Rahmen seiner eigenen, in der Hoffnung zu geben, die in ihrem Umfang und alle damit verbundenen Beobachter damit zerstört werden würde, wenn die Liste aktualisiert wurde. Das Ergebnis war kein Unterschied zu dem obigen Watcher-Problem.

Ein Versuch, alte Listenelemente zu löschen, bevor sie ersetzt werden. Auch hier kein Unterschied. Es wurde innerhalb von updateDisplayList() aufgerufen, bevor die Hauptliste aktualisiert wurde.

Antwort

0

Erreichte mein Ziel durch Redesign, stattdessen eine normale Listenansicht zu verwenden. Angezeigte Knoten werden zu einer Liste zusammengefasst, manuelle Indexierung wird verwendet, um die Dinge zu verfolgen, und es gibt keine Verschachtelung. Für alle Elemente, die verschachtelt werden, wird der Abstand berechnet, der auf der Tiefe der Struktur basiert.

Es gab auch einen Fehler, bei dem ich zu viele Knoten gleichzeitig bekam. Statt 50 würde ich 200-500 bekommen. Die Reparatur löste jedoch nicht die explodierende Anzahl an Uhren, daher betrachte ich sie nicht als Quelle des ursprünglichen Problems.