NgIf и ngSwitch AngularJS

Какая практическая разница между ngIf и ngSwitch? Обе директивы управляют DOM, но ngSwitch является более подробным. Является ли типичный случай просто использовать ngIf, если вам не нужен что-то действительно большое, в этом случае используйте ngSwitch?

Есть ли ситуация, когда ngSwitch и ngIf не являются прямыми заменами? Или их единственное практическое отличие от синтаксиса?

4 ответа

Брэндон Тилли, по-моему, понял это точно, в частности, указав контраст с ngShow/ngHide. Там есть еще одна разница: ng-If будет отсоединять и снова прикреплять элемент на месте. Но ng-Switch имеет внешний содержащий элемент, на котором вы объявляете главную директиву и ее условие: ng-switch="expression" . Условное содержимое внутри этого внешнего элемента будет append() -ed как последний дочерний элемент внешнего элемента, тем самым изменяя его положение относительно любого некондиционного содержимого внутри внешнего элемента.

И, см. этот CodePen для интерактивной демонстрации всех трех, показывая различия в исполнении.

EDIT: это поведение изменилось в Angular 1.2. Элементы теперь оставлены на месте. Codepen выше упоминает и демонстрирует это, обеспечивая связь с 1.08 Plunk, который, к сожалению, был уничтожен...


ngIf - это в основном версия ngSwitch с одним условием. Он отличается от ngShow тем, что он удаляет фактический элемент DOM, а не просто скрывает его. Если вы используете ngSwitch только с одной проверкой состояния, то я верю, что ngIf сделает то же самое.


Еще одно отличие заключается в том, что ngIf и ngSwitch создают новые области действия, в то время как ngShow/ngHide не делают.


Вы можете думать в ngIf/ngSwitch так же, как с if/switch при кодировании. Очевидно, что они делают почти то же самое, но есть случаи, когда ngIf лучше, и есть случаи, когда nfSwitch лучше.

licensed under cc by-sa 3.0 with attribution.