Les expressions complexes sont-elles possibles dans ng-hide / ng-show?


180

Je veux le faire:

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

mais l'expression évalue toujours à false.

Je ne veux pas définir de fonction spéciale sur $scope.


1
Cette syntaxe fonctionne pour moi et je l'utilise fréquemment. S'il est évalué à false, vous souhaiterez peut-être vérifier ces valeurs. Il est possible que les objets "globals" et / ou "mapping" soientundefined
derrylwc

Lisez mon commentaire ci-dessous la réponse.
Paul

juste un indice - si vous utilisez la méthode du contrôleur à la place, vous pouvez en fait parcourir l'évaluation dans le débogueur!
Dimitry K

Réponses:


212

Utilisez une méthode de contrôleur si vous avez besoin d'exécuter du code JavaScript arbitraire, ou vous pouvez définir un filtre qui renvoie vrai ou faux.

Je viens de tester (j'aurais dû le faire en premier), et quelque chose comme ça a ng-show="!a && b"fonctionné comme prévu.


4
Vous avez raison. Le problème était que l'indicateur isAdmin était de type «chaîne» plutôt que «booléen».
Paul

121

ng-show/ ng-hiden'accepte que des booleanvaleurs.

Pour les expressions complexes, il est bon d'utiliser le contrôleur et la portée pour éviter les complications.

Ci-dessous un fonctionnera (ce n'est pas une expression très complexe)

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

Ici, l'élément sera affiché dans l'interface utilisateur lorsque l'une des deux conditions retourne true (opération OR).

Comme ça, vous pouvez utiliser n'importe quelle expression.


12

Cela fonctionnera si vous n'avez pas trop d'expressions.

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

Pour plus d'expressions, utilisez un contrôleur.


1
Je ne pense pas que votre déclaration soit correcte: This will work if you do not have too many expressions.même si je suis d'accord que cela devrait être fait dans le contrôleur à la place.
Rahul Desai

7

J'essaie généralement d'éviter les expressions avec ng-show et ng-hide car elles ont été conçues comme des booléens, pas des conditions. Si j'ai besoin à la fois de logique conditionnelle et booléenne, je préfère mettre dans la logique conditionnelle en utilisant ng-if comme premier contrôle, puis ajouter une vérification supplémentaire pour la logique booléenne avec ng-show et ng-hide

Howerver, si vous souhaitez utiliser un conditionnel pour ng-show ou ng-hide, voici un lien avec quelques exemples: Affichage conditionnel utilisant ng-if, ng-show, ng-hide, ng-include, ng-switch


2

Certaines de ces réponses ci-dessus n'ont pas fonctionné pour moi, mais cela a fonctionné. Juste au cas où quelqu'un d'autre aurait le même problème.

ng-show="column != 'vendorid' && column !='billingMonth'"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.