Me preguntaba si hay una forma en angular para mostrar contenido condicional que no sea ng-show, etc. Por ejemplo, en backbone.js podría hacer algo con contenido en línea en una plantilla como:
<% if (myVar === "two") { %> show this<% } %>
pero en angular, parece que estoy limitado a mostrar y ocultar cosas envueltas en etiquetas html
<p ng-hide="true">I'm hidden</p>
<p ng-show="true">I'm shown</p>
¿Cuál es la forma recomendada en angular para mostrar y ocultar condicionalmente el contenido en línea en angular simplemente usando {{}} en lugar de envolver el contenido en etiquetas html?
angularjs
if-statement
ternary-operator
usuario1469779
fuente
fuente
Respuestas:
EDITAR: ¡La respuesta de 2Toad a continuación es lo que estás buscando! Vota esa cosa
Si está utilizando Angular <= 1.1.4, esta respuesta servirá:
Una respuesta más para esto. Estoy publicando una respuesta por separado, porque es más un intento "exacto" de solución que una lista de posibles soluciones:
Aquí hay un filtro que hará un "if inmediato" (también conocido como iif):
y se puede usar así:
fuente
Angular 1.1.5 agregó soporte para operadores ternarios:
fuente
myVar
solo si es falso? (es decir, ¿cómo puedo anidar variables en la expresión?) Intenté{{myVar === "two" ? "it's true" : {{myVar}}}}
pero no funciona.myVar
propiedad no necesita estar envuelta en llaves adicionales, ya está dentro de una expresión. Prueba{{myVar === "two" ? "it's true" : myVar}}
Miles de formas de pelar a este gato. Me doy cuenta de que estás preguntando entre {{}} específicamente, pero para otros que vienen aquí, creo que vale la pena mostrar algunas de las otras opciones.
funciona en tu $ scope (IMO, esta es tu mejor apuesta en la mayoría de los escenarios):
ng-show y ng-hide, por supuesto:
ngSwitch
Un filtro personalizado como Bertrand sugirió. (esta es su mejor opción si tiene que hacer lo mismo una y otra vez)
O una directiva personalizada:
Personalmente, en la mayoría de los casos, iría con una función en mi alcance, mantiene el marcado bastante limpio, y es rápido y fácil de implementar. A menos que, va a hacer exactamente lo mismo una y otra vez, en cuyo caso iría con la sugerencia de Bertrand y crearía un filtro o posiblemente una directiva, dependiendo de las circunstancias.
Como siempre, lo más importante es que su solución es fácil de mantener y es de esperar que sea comprobable. Y eso va a depender completamente de su situación específica.
fuente
Estoy usando lo siguiente para configurar condicionalmente la clase attr cuando no se puede usar ng-class (por ejemplo, al diseñar SVG):
El mismo enfoque debería funcionar para otros tipos de atributos.
(Creo que necesitas estar en el último Angular inestable para usar ng-attr-, actualmente estoy en 1.1.4)
He publicado un artículo sobre cómo trabajar con AngularJS + SVG que habla sobre este y otros temas relacionados. http://www.codeproject.com/Articles/709340/Implementing-a-Flowchart-with-SVG-and-AngularJS
fuente
Para verificar un contenido variable y tener un texto predeterminado, puede usar:
fuente
Si te entendí bien, creo que tienes dos formas de hacerlo.
Primero, puede probar ngSwitch y la segunda forma posible sería crear su propio filtro . Probablemente ngSwitch es el enfoque correcto, pero si desea ocultar o mostrar contenido en línea, simplemente usar el filtro {{}} es el camino a seguir.
Aquí hay un violín con un filtro simple como ejemplo.
fuente
La biblioteca de IU angular tiene una directiva integrada ui-if para la condición en la plantilla / Vistas hasta ui angular 1.1.4
Ejemplo: soporte en IU angular hasta ui 1.1.4
ng-si está disponible en todas las versiones angulares después de 1.1.4
si tiene datos en la variable de matriz, solo aparecerá el div
fuente
ui-if
fue eliminado al menos de la última versión angular-ui pero desde angular 1.1.5 tienesng-if
(de este comentario )Entonces, con Angular 1.5.1 (tenía una dependencia de aplicación existente en algunas otras dependencias de la pila MEAN, es por eso que actualmente no estoy usando 1.6.4)
Esto funciona para mí como dice el OP
{{myVar === "two" ? "it's true" : "it's false"}}
fuente
si desea mostrar "Ninguno" cuando el valor es "0", puede usarlo como:
o verdadero falso en angular js
fuente
Funciona incluso en situaciones exóticas:
fuente
Tiraré el mío en la mezcla:
https://gist.github.com/btm1/6802312
esto evalúa la instrucción if una vez y no agrega watch listener PERO puede agregar un atributo adicional al elemento que tiene el set-if llamado wait-for = "somedata.prop" y esperará a que se establezcan esos datos o propiedades antes evaluando la declaración if una vez. ese atributo adicional puede ser muy útil si está esperando datos de una solicitud XHR.
fuente