ngIf y ngSwitch AngularJS
¿ Cuál es la diferencia práctica entre ngIf
y ngSwitch
? Ambas directivas manipulan el DOM, pero ngSwitch
son más detalladas. ¿El caso típico es simplemente usarlo ngIf
a menos que necesite algo realmente grande, en cuyo caso usarlo ngSwitch
?
¿Existe una situación en la que ngSwitch
y ngIf
no sean reemplazos directos? ¿O su única diferencia práctica es la sintaxis?
ngIf
es básicamente una versión de ngSwitch
con una sola condición. Es diferente a ngShow
que elimina el elemento DOM real en lugar de simplemente ocultarlo. Si está utilizando una ngSwitch
verificación de condición única y veraz, creo que ngIf
hará lo mismo.
Creo que Michele Tilley tiene toda la razón , particularmente al señalar el contraste con ngShow
/ ngHide
. Hay una diferencia adicional a tener en cuenta: ng-If
separará y volverá a adjuntar un elemento en el lugar . Pero ng-Switch
tiene un elemento contenedor externo en el que declaras la directiva principal y su condición: ng-switch="expression"
. El contenido condicional dentro de ese elemento externo se agregará append()
como el último hijo del elemento externo, cambiando así su posición en relación con cualquier contenido no condicional dentro del elemento externo.
Y consulte este CodePen para ver una demostración interactiva de los tres, que muestra las diferencias en la ejecución.
EDITAR: Este comportamiento cambió en Angular 1.2. Los elementos ahora se dejan en su lugar. El Codepen anterior menciona y demuestra esto, proporcionando un enlace a un Plunk 1.08 que lamentablemente ha sido eliminado...
Una diferencia más sería que ngIf y ngSwitch crean nuevos ámbitos, mientras que ngShow/ngHide no lo hacen.
Puedes pensar en ngIf/ngSwitch de la misma manera que lo haces con if/switch cuando estás codificando. Obviamente hacen casi lo mismo, pero hay casos en los que ngIf es mejor y hay casos en los que nfSwitch es mejor.