11 votes

Utiliser & (opérateur bitwise AND) dans les expressions ng-if d'Angular

Je n'arrive pas à obtenir le & opérateur pour travailler dans un environnement Angular ng-if (à utiliser avec certains indicateurs de bits). Supposons que nous ayons un code HTML comme celui-ci :

<div ng-if="value & 2"> </div>

Si value est égal à 3, l'opération bit à bit doit renvoyer 2 et donc une valeur vraie.

Cependant, Angular lance un Syntax Error exception à chaque fois. L'opération n'est-elle pas autorisée ? Ou est-ce que je fais quelque chose de mal ?

Lien vers le site plongeur .

Edit : J'ai déjà résolu mon problème en utilisant une fonction simple qui fait le travail :

$scope.checkFlag = function(value, flag){
   return value & flag;
}

Mais je n'aime vraiment pas cette solution. Existe-t-il un moyen de l'utiliser dans un ng-if (sans utiliser la fonction, évidemment) ?

14voto

Michael Liu Points 15764

Vous ne pouvez pas utiliser l'option & dans une expression Angular. D'après le la documentation :

Les expressions Angular sont semblables aux expressions JavaScript, avec les différences suivantes :

  • ...
  • Vous ne pouvez pas utiliser l'option Bitwise, , ou void dans une expression Angular.

Si vous souhaitez exécuter un code JavaScript plus complexe, vous devez en faire une méthode de contrôleur et l'appeler à partir de votre vue.

Note sur la nomenclature : & es el par bit Opérateur AND ; && es el logique Opérateur AND.

UPDATE : Votre checkFlag est probablement la meilleure solution car son nom indique clairement ce qu'elle fait (et c'est ce que j'utiliserais), mais si vous utilisez la fonction absolument ne veulent pas de fonction supplémentaire, vous pouvez utiliser l'expression équivalente suivante :

<div ng-if="value % 4 >= 2"> </div>

En général, (value & x) != 0 (où x est une puissance de 2) est équivalent à value % (2 * x) >= x .

1voto

StephenTG Points 2185

Le problème est que vous utilisez & au lieu de && . & est l'opérateur bitwise, et Angular n'autorise pas les opérateurs bitwise dans les expressions.

1voto

vilius Points 11

Je ne sais pas exactement ce que vous voulez accomplir ici, mais vous utilisez un opérateur ET binaire. Et dans la documentation angulaire, il est dit :

Pas d'opérateurs Bitwise, Comma et Void : Vous ne pouvez pas utiliser les opérateurs Bitwise, , ou void dans une expression Angular.

Expression AngularJS

1voto

KreepN Points 5025

Puisque personne n'a fourni de solution, je suppose que vous pouvez simplement modifier votre html pour :

<body ng-controller="MainCtrl">
   <div ng-if="check(value,2)">Hey! </div>
</body>

avec

$scope.check = function(val, providedInt){
   return val & providedInt;
 };

Voir plunkr !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X