it-swarm.com.de

ngIf und ngSwitch AngularJS

Was ist der praktische Unterschied zwischen ngIf und ngSwitch? Beide Direktiven manipulieren das DOM, aber ngSwitch ist ausführlicher. Ist es der typische Fall, nur ngIf zu verwenden, es sei denn, Sie benötigen etwas wirklich Großes. In diesem Fall verwenden Sie ngSwitch?

Gibt es eine Situation, in der ngSwitch und ngIf keine direkten Ersetzungen sind? Oder ist ihr einziger praktischer Unterschied die Syntax?

40
Harry

Michele Tilley hat es genau richtig verstanden , glaube ich, insbesondere, wenn ich auf den Kontrast zu ngShow/ngHide hinweise. Es gibt noch einen weiteren Unterschied zu beachten: ng-If Löst ein Element und hängt es an der richtigen Stelle wieder an . Aber ng-Switch Hat ein äußeres enthaltendes Element, für das Sie die Hauptanweisung und ihre Bedingung deklarieren: ng-switch="expression". Der bedingte Inhalt in diesem äußeren Element ist append()- und wird als letztes untergeordnetes Element des äußeren Elements definiert, wodurch seine relative Position geändert wird auf jeden nicht bedingten Inhalt innerhalb des äußeren Elements.

Und siehe this CodePen für eine interaktive Demo aller drei, die die Unterschiede in der Ausführung zeigt.


BEARBEITEN: Dieses Verhalten wurde in Angular 1.2 geändert. Elemente bleiben nun an Ort und Stelle. Der obige Codepen erwähnt und demonstriert dies und stellt einen Link zu einem 1.08 Plunk bereit, der leider ausgelöscht wurde ...

19
XML

ngIf ist im Grunde eine Version von ngSwitch mit einer einzigen Bedingung. Es unterscheidet sich von ngShow darin, dass es das eigentliche DOM-Element entfernt, anstatt es einfach auszublenden. Wenn Sie eine ngSwitch mit nur einer einfachen Überprüfung der Wahrheitsbedingung verwenden, dann glaube ich, dass ngIf dasselbe tun wird.

37
Michelle Tilley

Ein weiterer Unterschied wäre, dass ngIf und ngSwitch neue Bereiche erstellen, während ngShow/ngHide dies nicht tun.

6

Sie können in ngIf/ngSwitch genauso denken wie in if/switch, wenn Sie codieren. Offensichtlich machen sie fast dasselbe, aber es gibt Fälle, in denen ein ngIf besser ist, und es gibt Fälle, in denen nfSwitch besser ist.

0
z_inx