Was ist der einfachste Weg, eine AngularJS-Bereichsvariable von der Direktive an den Controller zu übergeben? Alle Beispiele, die ich gesehen habe, scheinen so komplex zu sein. Gibt es nicht eine Möglichkeit, über eine Direktive auf einen Controller zuzugreifen und eine seiner Bereichsvariablen festzulegen?
angularjs
angularjs-directive
ng-controller
Aufzieh Spielzeug
quelle
quelle
Antworten:
Bearbeitet am 25.08.2014: Hier habe ich es gegabelt.
Danke @anvarik.
Hier ist die JSFiddle . Ich habe vergessen, wo ich das gegabelt habe. Dies ist jedoch ein gutes Beispiel, das Ihnen den Unterschied zwischen = und @ zeigt
quelle
Warten Sie, bis Angular die Variable ausgewertet hat
Ich habe viel damit herumgespielt und konnte es auch mit der im Bereich definierten Variablen nicht
"="
zum Laufen bringen. Hier sind drei Lösungen, abhängig von Ihrer Situation.Lösung Nr. 1
Ich fand heraus, dass die Variable noch nicht durch Winkel bewertet wurde, als sie an die Direktive übergeben wurde. Dies bedeutet, dass Sie darauf zugreifen und es in der Vorlage verwenden können, jedoch nicht innerhalb der Link- oder App-Controller-Funktion, es sei denn, wir warten auf die Auswertung.
Wenn Ihre Variable zu ändern ist , oder abgerufen wird durch eine Anfrage, die Sie verwenden sollten
$observe
oder$watch
:Und hier ist das HTML (denken Sie an die Klammern!):
Beachten Sie, dass Sie die Variable nicht im Bereich festlegen sollten
"="
, wenn Sie die$observe
Funktion verwenden. Außerdem habe ich festgestellt, dass Objekte als Zeichenfolgen übergeben werden. Wenn Sie also Objekte übergeben, verwenden Sie Lösung 2 oderscope.$watch(attrs.yourDirective, fn)
(oder 3, wenn sich Ihre Variable nicht ändert).Lösung Nr. 2
Wenn Ihre Variable beispielsweise in einem anderen Controller erstellt wurde , Sie jedoch nur warten müssen, bis Angular sie ausgewertet hat, bevor Sie sie an den App-Controller senden, können Sie
$timeout
warten, bis der$apply
ausgeführt wird. Außerdem müssen wir es verwenden$emit
, um es an den übergeordneten Bereichs-App-Controller zu senden (aufgrund des isolierten Bereichs in der Direktive):Und hier ist das HTML (keine Klammern!):
Lösung Nr. 3
Wenn sich Ihre Variable nicht ändert und Sie sie in Ihrer Direktive auswerten müssen, können Sie die folgende
$eval
Funktion verwenden:Und hier ist das HTML (denken Sie an die Klammern!):
Schauen Sie sich auch diese Antwort an: https://stackoverflow.com/a/12372494/1008519
Referenz für das FOUC-Problem (Flash of unstyled content): http://deansofer.com/posts/view/14/AngularJs-Tips-and-Tricks-UPDATED
Für Interessierte: Hier ist ein Artikel über den Winkellebenszyklus
quelle
ng-if="someObject.someVariable"
Anweisung (oder das Element mit der Anweisung als Attribut) aus - die Anweisung wird erst aktiviert, nachdem siesomeObject.someVariable
definiert wurde.