Ich bin sehr neu bei AngularJS. Kann mir jemand den Unterschied zwischen diesen AngularJS-Operatoren erklären: &, @ and =
wenn man den Bereich anhand eines geeigneten Beispiels isoliert.
javascript
angularjs
Nur Rony
quelle
quelle
Antworten:
@
Ermöglicht die Übergabe eines im Direktivenattribut definierten Werts an den Isolationsbereich der Direktive. Der Wert kann ein einfacher Zeichenfolgenwert (myattr="hello"
) oder eine interpolierte AngularJS-Zeichenfolge mit eingebetteten Ausdrücken (myattr="my_{{helloText}}"
) sein. Stellen Sie sich das als "Einweg" -Kommunikation vom übergeordneten Bereich in die untergeordnete Richtlinie vor. John Lindquist hat eine Reihe von kurzen Screencasts, die diese erklären. Der Screencast auf @ ist hier: https://egghead.io/lessons/angularjs-isolate-scope-attribute-binding&
Ermöglicht dem isolierten Bereich der Direktive, Werte zur Auswertung in dem im Attribut definierten Ausdruck an den übergeordneten Bereich zu übergeben. Beachten Sie, dass das Direktivenattribut implizit ein Ausdruck ist und keine Syntax für doppelte geschweifte Klammern verwendet. Dieser ist schwieriger im Text zu erklären. Der Screencast zu & ist hier: https://egghead.io/lessons/angularjs-isolate-scope-expression-binding=
Richtet einen bidirektionalen Bindungsausdruck zwischen dem Isolatbereich der Direktive und dem übergeordneten Bereich ein. Änderungen im untergeordneten Bereich werden an den übergeordneten Bereich weitergegeben und umgekehrt. Stellen Sie sich = als eine Kombination aus @ und & vor. Der Screencast auf = ist hier: https://egghead.io/lessons/angularjs-isolate-scope-two-way-bindingUnd schließlich ist hier ein Screencast, der alle drei zusammen in einer einzigen Ansicht zeigt: https://egghead.io/lessons/angularjs-isolate-scope-review
quelle
Ich möchte die Konzepte aus der Perspektive der Vererbung von JavaScript-Prototypen erläutern. Hoffentlich helfen zu verstehen.
Es gibt drei Möglichkeiten, den Geltungsbereich einer Richtlinie zu definieren:
scope: false
: Winkelstandard. Der Geltungsbereich der Direktive entspricht genau dem des übergeordneten Geltungsbereichs (parentScope
).scope: true
: Angular schafft einen Bereich für diese Direktive. Der Bereich erbt prototypisch vonparentScope
.scope: {...}
: Der isolierte Bereich wird unten erläutert.Angabe
scope: {...}
definiert eineisolatedScope
. EineisolatedScope
nicht vererben Eigenschaften ausparentScope
, obwohlisolatedScope.$parent === parentScope
. Es ist definiert durch:isolatedScope
hat keinen direkten Zugriff aufparentScope
. Aber manchmal muss die Richtlinie mit der kommunizierenparentScope
. Sie kommunizieren durch@
,=
und&
. Das Thema , über Symbole verwendet@
,=
und&
spricht über SzenarienisolatedScope
.Es wird normalerweise für einige gemeinsame Komponenten verwendet, die von verschiedenen Seiten gemeinsam genutzt werden, z. B. Modals. Ein isolierter Bereich verhindert die Verschmutzung des globalen Bereichs und kann problemlos zwischen Seiten geteilt werden.
Hier ist eine grundlegende Anweisung: http://jsfiddle.net/7t984sf9/5/ . Ein Bild zur Veranschaulichung ist:
@
: Einwegbindung@
übergibt einfach die Eigenschaft vonparentScope
bisisolatedScope
. Es wird aufgerufenone-way binding
, was bedeutet, dass Sie den Wert vonparentScope
Eigenschaften nicht ändern können . Wenn Sie mit der JavaScript-Vererbung vertraut sind, können Sie diese beiden Szenarien leicht verstehen:Wenn die Bindungseigenschaft ein primitiver Typ ist, wie
interpolatedProp
im Beispiel: Sie können änderninterpolatedProp
,parentProp1
würden aber nicht geändert. Wenn Sie jedoch den Wert von ändernparentProp1
,interpolatedProp
wird dieser mit dem neuen Wert überschrieben (bei eckigem $ Digest).Wenn es sich bei der Bindungseigenschaft um ein Objekt handelt, z. B
parentObj
.: Da die übergebene EigenschaftisolatedScope
eine Referenz ist, löst das Ändern des Werts diesen Fehler aus:TypeError: Cannot assign to read only property 'x' of {"x":1,"y":2}
=
: Zweiwegebindung=
wird aufgerufentwo-way binding
, was bedeutet, dass bei jeder Änderung inchildScope
auch der Wert in aktualisiertparentScope
wird und umgekehrt. Diese Regel gilt sowohl für Grundelemente als auch für Objekte. Wenn Sie den Bindungstyp von ändernparentObj
, werden=
Sie feststellen, dass Sie den Wert von ändern könnenparentObj.x
. Ein typisches Beispiel istngModel
.&
: Funktionsbindung&
Ermöglicht der Direktive, eineparentScope
Funktion aufzurufen und einen Wert aus der Direktive zu übergeben. Überprüfen Sie beispielsweise JSFiddle: & im Direktivenbereich .Definieren Sie eine anklickbare Vorlage in der Direktive wie folgt:
Und verwenden Sie die Richtlinie wie folgt:
Die Variable
valueFromDirective
wird von der Direktive an den übergeordneten Controller übergeben{valueFromDirective: ...
.Referenz: Grundlegendes zu Bereichen
quelle
Nicht meine Geige, aber http://jsfiddle.net/maxisam/QrCXh/ zeigt den Unterschied. Das Schlüsselstück ist:
quelle
@ : Einwegbindung
= : bidirektionale Bindung
& : Funktionsbindung
quelle
AngularJS - Isolierte Bereiche - @ vs = vs &
Kurze Beispiele mit Erläuterungen finden Sie unter folgendem Link:
http://www.codeforeach.com/angularjs/angularjs-isolated-scopes-vs-vs
@ - Einwegbindung
In der Richtlinie:
Im Hinblick auf:
= - bidirektionale Bindung
In der Richtlinie:
Im Hinblick auf:
& - Funktionsaufruf
In der Richtlinie:
Im Hinblick auf:
quelle
Ich habe verdammt lange gebraucht, um das wirklich in den Griff zu bekommen. Der Schlüssel zu mir war zu verstehen, dass "@" für Dinge steht, die vor Ort ausgewertet und als Konstante in die Direktive übernommen werden sollen, wobei "=" das Objekt selbst tatsächlich übergibt.
Es gibt einen schönen Blog-Beitrag, der dies unter folgender Adresse erklärt: http://blog.ramses.io/technical/AngularJS-the-difference-between-@-&-and-=-when-declaring-directives-using-isolate-scopes
quelle