¿Son posibles expresiones complejas en ng-hide / ng-show?


180

Quiero hacerlo:

ng-hide="!globals.isAdmin && mapping.is_default"

pero la expresión evalúa siempre a false.

No quiero definir una función especial en $scope.


1
Esa sintaxis funciona para mí y la uso con frecuencia. Si está evaluando false, es posible que desee verificar dos veces esos valores. Es posible que los objetos "globales" y / o "mapeados" seanundefined
derrylwc

Lee mi comentario debajo de la respuesta.
Paul

solo una pista: si utiliza el método del controlador, puede pasar por la evaluación en el depurador.
Dimitry K

Respuestas:


212

Utilice un método de controlador si necesita ejecutar código JavaScript arbitrario, o podría definir un filtro que devuelva verdadero o falso.

Acabo de probar (debería haber hecho eso primero), y algo como ng-show="!a && b"funcionó como se esperaba.


44
Tienes razón. El problema era que el indicador isAdmin era de tipo 'cadena' en lugar de 'booleano'.
Paul

121

ng-show/ ng-hideacepta solo booleanvalores.

Para expresiones complejas, es bueno usar el controlador y el alcance para evitar complicaciones.

Debajo de uno funcionará (no es una expresión muy compleja)

ng-show="User=='admin' || User=='teacher'"

Aquí el elemento se mostrará en la interfaz de usuario cuando cualquiera de las dos condiciones devuelva verdadero (operación OR).

De esta manera, puedes usar cualquier expresión.


12

Esto funcionará si no tiene demasiadas expresiones.

Ejemplo: ng-show="form.type === 'Limited Company' || form.type === 'Limited Partnership'"

Para más expresiones que esta, use un controlador.


1
No creo que su declaración sea correcta: This will work if you do not have too many expressions.aunque estoy de acuerdo en que debería hacerse en el controlador.
Rahul Desai

7

Generalmente trato de evitar expresiones con ng-show y ng-hide, ya que fueron diseñadas como booleanos, no condicionales. Si necesito lógica condicional y booleana, prefiero poner la lógica condicional usando ng-if como primera verificación, luego agregar una verificación adicional para la lógica booleana con ng-show y ng-hide

Sin embargo, si desea usar un condicional para ng-show o ng-hide, aquí hay un enlace con algunos ejemplos: Visualización condicional usando ng-if, ng-show, ng-hide, ng-include, ng-switch


2

Algunas de estas respuestas anteriores no funcionaron para mí, pero esto sí. En caso de que alguien más tenga el mismo problema.

ng-show="column != 'vendorid' && column !='billingMonth'"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.