¿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.

Pablo
fuente
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.

Mark Rajcok
fuente
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.

myaseedk
fuente
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.

lvadim01
fuente
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

James Drinkard
fuente
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'"
Acosador de la muerte
fuente