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.

Paul
la source
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.

Mark Rajcok
la source
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.

myaseedk
la source
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.

lvadim01
la source
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

James Drinkard
la source
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'"
Deathstalker
la source