AngularJS ng-classe plusieurs conditions avec OU opérateur
J'essaie de trouver la bonne syntaxe pour ajouter des classes en fonction de valeurs angulaires.
Je veux activer une classe concernant les 2 conditions (un sur live les modifications de l'utilisateur, et un sur le chargement de données) avec l'un OU de l'exploitant.
Ici est la ligne :
<a href="" ng-click="addFavorite(myfav.id);favorite=!favorite">
<i class="fa orange" ng-class="{'fa-star': (favorite || (fav==myfav.id)), 'fa-star-o': !favorite}"></i>
</a>
J'ai essayé des différents codes comme celui-ci :
ng-class="{'fa-star': favorite, 'fa-star': (fav==myfav.id), 'fa-star-o': !favorite}"
sans succès.
Quelqu'un peut-il m'aider à trouver la bonne syntaxe ?
Il devrait être
Parens devrait fonctionner tout aussi bien. Si je change de votre Plunkr code et de les ajouter à votre ET d'expression, tout fonctionne toujours. Je suppose que l'OP a un autre problème avec leur code.
Oui, c'était mon premier code, mais il semble qu'il ne s'applique pas à la classe. J'ai testé la
Oh. Pourrait-il être quelque chose à propos de la logique : si
{'fa-star': favorite || fav == myfav.id, 'fa-star-o': !favorite}
. Voir un exemple similaire dans ce plunkr. J'ai essayé de remplacer ce code avec ng-class="{'has-error': ctrl.submitted && 1 == 1}
et il fonctionne.Parens devrait fonctionner tout aussi bien. Si je change de votre Plunkr code et de les ajouter à votre ET d'expression, tout fonctionne toujours. Je suppose que l'OP a un autre problème avec leur code.
Oui, c'était mon premier code, mais il semble qu'il ne s'applique pas à la classe. J'ai testé la
fav == myfav.id
à l'extérieur et il retourne "true" comme il se doit.Oh. Pourrait-il être quelque chose à propos de la logique : si
!favorite
mais fav==myfav.id
le résultat serait à la fois fa-star
fa-star-o
et la dernière s'applique et visuellement ne pas changer l'icône. Donc je ne suis pas sûr que mon "switch" fonctionne dans ce casOriginalL'auteur user1713964 | 2014-06-18
Vous devez vous connecter pour publier un commentaire.
De l'essayer.
Pas besoin des parenthèses.
Vouliez-vous dire, lorsque la variable préféré = false et fav == myFav.id? Il en résulte ajouter les deux classes 'fa-star' et 'fa-star-o".
Le problème est avec l'opérateur OU, pas de la deuxième classe. Lorsque l'une des conditions de changements, il remplace l'autre condition.
en remplacement , que voulez-vous dire, pourrais-tu élaborer un peu. aussi, si ils peuvent vous dire exactement ce que vous voulez devrait arriver et sa ne se passe pas bien , mal hypothèses que nous avons fait
Malheureusement, je vais avoir des difficultés à reproduire le problème que j'ai été voir. J'ai peut-être de se rétracter.
OriginalL'auteur Abhilash P A- Pullelil
Une fois que vous avez à ajouter une certaine logique derrière
ng-class
il est toujours préférable de s'en tenir à l'aide de la manette pour le faire. Vous pouvez le faire de deux façons, soit: syntaxe JSON (le même que dans votre code HTML, juste plus lisible) ou évidemment JavaScript.HTML (JSON) Syntaxe
HTML
JS
Bon Vieux if (JavaScript)
HTML
JS
OriginalL'auteur SDekov
Le code HTML restera le même
Mais l'ordre dans lequel les classes sont présentes dans votre fichier CSS sera question
La
fa-star
classe d'appliquer lorsquefavorite
est vrai oufav===myfav.id
renvoie la valeur true.Donc si après avoir cliqué une fois , supposons que
fav===myfav.id
retourne true et ne cesse de revenir , même lorsque vous cliquez sur nouveau , puis la classefa-star
sera toujours appliqué à partir de là.Si par défaut
favorite
est faux , alorsfa-star-o
sera appliquée lorsque le modèle est chargé pour la première fois, mais après le premier clic ,lorsquefavorite
est défini sur true , il sera supprimé. Puis sur la deuxième clic , lorsquefavorite
est défini à false, encore une fois ,fa-star-o
elle sera appliquée, mais dans ce cas ,fa-star
classe sera également appliquée commefa===myfav.id
condition serait encore de retourner true (en Supposant que c'est le cas).Par conséquent, vous devez établir l'ordre de priorité les besoins de la classe pour obtenir appliquée pour sûr lorsqu'il est présent sur l'élément de cas peuvent survenir lorsque les deux classes peuvent être présents en même temps sur l'élément. Par exemple, si
fa-star-o
classe est prioritaire, puis le mettre au-dessous de lafa-star
dans votre CSS , comme par exempleVoir le travail de démonstration à http://plnkr.co/edit/Dh59KUU41uWpIkHIaYrO?p=preview
OriginalL'auteur Prayag Verma
Vous pouvez utiliser des expression avec ng-classe
OriginalL'auteur allenhwkim