5

Ich habe eine benutzerdefinierte Direktive myDirective, die eine Aufgabe auf einem Element ausführt.AngularJS Direktive in ng-wenn nicht

Ich habe diese Anweisung in einem ng-if Block

<div ng-if="condition"> 
    <div my-directive></div> 
</div> 

So etwas wie diese Geige: http://jsfiddle.net/hGnvv/ nur die ng-if Bedingung true schaltet sich nach meinen $http Anfragen geladen werden.

Die Direktive ist wahrscheinlich während der Laufzeit kompiliert, aber nie verknüpft, so dass der Code nie ausgeführt wird. Wenn ich die ng-if durch ng-show ersetze, funktioniert die Richtlinie gut.

Irgendwelche Lösungen?

Bearbeiten: Ich kann ng-show nicht verwenden, weil ich 130 Anweisungen innerhalb des Formulars haben. 20 Direktiven laufen sowieso, und die anderen laufen nach meinem Objekttyp.

  • ng-if="type == 2" dann laden andere Elemente usw.
    • ng-if="type == 1" dann diese Elemente laden Wenn ich die ng-if-ng-show ändern, nimmt die Form 8s statt 1s zu laden.

    +4

    verwenden sollten Sie haben bereits eine Lösung.Ersetzen Sie ng-if mit ng-show – nikhil

    +0

    Ich kann das nicht tun, ich habe 130 Anweisungen auf einem einzigen Formular. Wenn ich den ng-if mit ng-show ersetze, wird der ganze Code, der ausgeführt werden muss, viel langsamer (8s statt 1s). –

    +2

    Verwenden Sie ng-show wenn möglich. Ng-if entfernt das Element aus dem DOM, so dass es keine Möglichkeit gibt, es zu kompilieren. –

    Antwort

    2

    Das Problem war nicht, dass die Richtlinie nicht ausgeführt wurde, aber dass die $watch Funktionen, die ich darin hatte, überhaupt nicht ausgeführt wurde. Ich habe es nicht verstanden, den genauen Grund des Problems zu verstehen, da die gleiche Richtlinie auch außerhalb von ng-if funktioniert.

    Wie auch immer geändert meine $watch zu ->$watchCollection und es funktioniert jetzt gut, da es alle Updates zu den Objekten, die ich gerade sehe, sieht.

    2

    Die ng-if Bedingung ist zunächst falsch, daher existiert das Element nicht im DOM und die Anweisung wurde nicht verknüpft.

    Wenn die ng-if Bedingung richtig die Verbindung Rückruf ausgelöst werden soll später true wird, wie in diesen Beispielen gesehen:

    ng-if auf true einstellen, wenn die Schaltfläche geklickt wird: http://jsfiddle.net/q05gret0/

    Einstellung ng-if auf true nach $http Anforderung wird geladen: http://jsfiddle.net/fhu8ky62/1/

    Wenn dieses Verhalten nicht auftritt, liegt das Problem möglicherweise an einem vererbten Bereich. Überprüfen Sie, ob die ng-if die gleiche Bereichsvariable überwacht, die Ihre Anforderung aktualisiert. This article hat ein paar Punkte beim Variablen Shadowing von Eltern/Kind und anderen Einschränkungen.

    +0

    Ich möchte den Code ausführen, wenn die ng-if-Bedingung wahr wird. Das Problem ist, dass der Link der Richtlinie nicht ausgeführt wird, wenn er wahr wird. –

    +0

    Ah verstehe ich jetzt, werde meine Antwort bearbeiten – seanhodges

    +0

    Danke für die Hilfe, das war nicht das Problem. Ich habe es gefunden und es in einer anderen Antwort unten gepostet. –

    0

    zum Beispiel, wenn Ihr Modell ist wie $scope.item = true und verwenden Sie es wie ng-if="item" sollten Sie Ihr Modell $scope.myvalue = {} und verwenden ändern wie folgt aus: ng-if="myvalue.item", überhaupt meine ich Sie Objekteigenschaft für ng-if nicht einfacher Wert

    Verwandte Themen