Ich versuche, meinen Kopf um Bereiche in angularjs zu wickeln, besonders wenn es darum geht, Callbacks auf dem Modul aufzurufen, das eine Direktive verwendet. Ich habe 3 verschiedene Wege gefunden, um das Gleiche zu erreichen, und ich versuche, die Vor- / Nachteile für jeden Ansatz zu verstehen.
Wann ist es angebracht, &
, =
zu benutzen oder Funktionen direkt auf dem Eltern aufzurufen?
Ich bevorzuge die Bindung mit dem Zeichen '=', da in der Direktive und im Modul, in dem die Direktive gehostet wird, weniger Code benötigt wird, aber Laut der Dokumentation (Verständnis von Transklusion und Gültigkeitsbereichen) scheint die Bindung an Rückrufe mit &
die bevorzugte Methode zu sein, warum?
Gute Frage. Diese Art von Entscheidungen sollten zuerst aus der Perspektive getroffen werden, um Ihre Bedenken zu trennen. Also müssen wir das Aufrufen einer Methode für den übergeordneten Bereich eliminieren - die Direktive muss zu viel über den Elternteil wissen.
Als nächstes schauen wir uns den Zweck an. Callbacks sind per definitionem Methoden. &
wertet einen Ausdruck im Kontext des übergeordneten Bereichs aus, während eine bidirektionale Bindung nur einen Variablennamen darstellt. &
ist ein Los leistungsfähiger und gibt dem Benutzer Ihrer Anweisung mehr Flexibilität. Sicher, sie könnten das tun, wie in Ihrem Beispiel:
Aber sie könnten das auch tun:
%Vor%Wir müssen den Namen einer Variablen nicht eingeben - es ist any AngularJS Ausdruck . So kann der Benutzer der Komponente frei auf Ihre Veranstaltung reagieren. Super!
Aber auch die Richtlinie kann auf Zustandsänderungen reagieren. Sie könnten beispielsweise nach einer Bedingung suchen:
%Vor% Und myVar
kann einen beliebigen Wert auswerten und Ihre Anweisung kann jederzeit bei Änderungen entsprechend angepasst werden. Anstatt eine Variable zu teilen, teilen Sie einen Ausdruck . In diesem Fall würde eine bidirektionale Bindung funktionieren, aber wenn die Direktive diese Variable nicht ändert (und vielleicht auch nicht ändern sollte), warum brauchen wir dann eine bidirektionale Bindung?
Aber wieder muss es keine Variable sein. Wie wäre es mit einem Ausdruck, der zu wahr oder falsch auswertet?
%Vor%Unsere Anweisung muss nicht darauf achten, wie der übergeordnete Bereich einen Wert erreicht - nur was der Wert schließlich ist .
So können wir es für den übergeordneten Bereich verwenden, um auf die Richtlinie zu reagieren oder damit die Richtlinie auf den übergeordneten Bereich reagiert - alles mit flexiblen Ausdrücken. Ordentlich.
Also, =
dient zum Sicherstellen der Datenbindung; Es stellt sicher, dass der Bereich, in dem die Richtlinie verwendet wurde, und die Richtlinie selbst für eine bestimmte Variable synchron bleiben. &
ermöglicht die Auswertung von Ausdrücken im Kontext des übergeordneten Bereichs und die Reaktion der Richtlinie oder des übergeordneten Bereichs auf potenziell komplexe Statusänderungen.
Tags und Links javascript angularjs angularjs-directive angularjs-scope