Есть много способов управлять наличием некоторых элементов на основе критериев на веб-сайте. Исходя из реальной ситуации, я обычно использую для этих целей ngSwitch, ngIf и ngShow. Давайте посмотрим, чем они отличаются.

Как работать

Первое различие между ngSwitch, ngIf и ngShow заключается в том, как они управляют видимостью элемента.

  • ngShowдобавляет класс ng-hide к элементу, когда критерий ложный, и наоборот, удаляет его, когда критерий истинен.

  • ngIf гораздо сложнее. Он отображает содержимое внутри элемента на основе критериев. Когда критерии ложны, это результат

  • ngSwitch очень похож на использование регистра переключателей в html путем объединения ngSwitchс ngSwitchWhen(если имеется более одного случая с похожим действием, ngSwitchWhenSeparator. Способ, которым ngSwitch управляет элементом, такой же, как ngIf.

Влияние на объем

Из-за того, как они работают, вы должны соблюдать осторожность при связывании ngModel внутри них. ngSwitch и ngIfпредоставят дочернюю область из текущей на основе существования, в то время как ngShowвсе еще использует ту же область, что и текущая.

Например, у нас есть модель name для области видимости, и мы привязываем ее к трем разным входам внутри ngShow, ngSwitch и ngIf. Давайте назовем name1 представителем name внутри ngIfили ngSwitch. У нас есть 3 разных сценария:

  1. В первый раз (когда ngIf или ngSwitch просто визуализирует область действия), name1 будет отражать изменения из name.
  2. При изменении значения name1 name не отразится на изменении.
  3. После сценария #2 связь между name и name1 исчезает. Если вы измените name сейчас, name1 не изменится.

Чтобы выполнить привязку к правильной модели, вы должны использовать $parent для выбора правильной модели. В приведенном выше примере это $parent.name.

Вы можете убедиться в этом непосредственно с этим плункером.