2016-06-01 8 views
1

Ich habe vor kurzem angefangen zu studieren über Digest und Leistungsverbesserungen in AngulaJs und fand auf meiner Website, dass ich Tonnen von ng-if verwende.AngularJs Alternative zu ng-wenn Digest zu speichern

Manchmal in ng-if gibt es eine Variable, die sich ändern kann, aber oft beim Start des Controllers behoben wird und sich dann nie ändert.

Was soll ich tun, um die Leistung zu verbessern vermeiden Digest zu bewerten jede Schleife die unveränderbar ng-if? Sollte ich die Richtlinie ändern? Mit was?

Z. B

In meiner Kopfvorlage Ich habe ein div, die nur von bestimmten Art von Benutzer zu sehen sind. Es ist nur ein Div, also möchte ich keine andere Vorlage aufrufen. Ich habe <div ng-if="userIsSuperior()"> ... </div>

Wenn zuerst die Rückkehr vale von userIsSuperior() ausgewertet, ändert sich nie (während dieser Sitzung natürlich), aber ich weiß, dass AngularJS Digest es jede Schleife auswertet. Wie kann ich das vermeiden? Oder fehlt mir etwas?

+0

Fest ohne einige spezifische Beispiele zu beantworten – charlietfl

+0

ein Beispiel hinzugefügt. Ich habe wirklich viele von ihnen, die meisten mit Funktionen im Controller, die auf der Grundlage einiger Berechnungen (die beim Website-Raise wirklich teuer werden können) und einige mit nur einer Variablen wahr oder falsch zurückgibt. –

+0

Nun, eine Sache ist, es ist immer besser, Eigenschaften eines Bereichsmodells festzulegen, als Funktionen wie 'userIsSuperior()' zu verwenden. Speichert viele unnötige Funktionsaufrufe während Digests – charlietfl

Antwort

2

Ich denke, was Sie suchen, ist one-time binding.

Wenn Sie:

<div ng-if="::userIsSuperior()"> ... </div> 

Dann wird der Wert von userIsSuperior() wird nur einmal berechnet werden und auf diesen Wert halten wird.

Siehe demo.

0

Erste Antwort Lösungen benötigt AngularJS> 2.

ich eine gültige Lösungen im Umgang mit OnceJS gefunden, eine Bibliothek für die einmalige bindend.

Here