J'essaie de trouver la bonne syntaxe pour ajouter des classes en fonction de angular. Je veux activer une classe concernant 2 conditions (une sur les changements d'utilisateurs en direct et une sur le chargement des données) avec a = OR.
Voici 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é différents codes comme celui-ci:
ng-class="{'fa-star': favorite, 'fa-star': (fav==myfav.id), 'fa-star-o': !favorite}"
sans aucun succès. Quelqu'un peut-il m'aider à trouver la bonne syntaxe?
Essaye ça.
<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>
Pas besoin de supports.
Une fois que vous devez ajouter un peu de logique derrière ng-class
il est toujours préférable de s'en tenir à l'utilisation du contrôleur pour ce faire. Vous pouvez le faire de deux manières: la syntaxe JSON (la même que dans votre HTML, juste plus lisible) ou bien sûr JavaScript.
HTML
<i ng-class="getFavClassIcon(myFav.id)"></i>
JS
$scope.getFavClassIcon= function (favId) {
return {
'fa-star-o' : !$scope.favorite,
'fa-star' : $scope.favorite || $scope.fav === favId
};
};
HTML
<i ng-class="getFavClassIcon(myFav.id)"></i>
JS
$scope.getFavClassIcon= function (favId) {
if (!$scope.favorite) {
return 'fa-star-o';
} else if ($scope.favorite) { // obviously you can use OR operator here
return 'fa-star';
} else if ($scope.fav === favId) {
return 'fa-star';
}
};
Le HTML restera le même
<a href="" ng-click="addFavorite(myfav.id);favorite=!favorite">
<i ng-class="{'fa-star-o':!favorite,'fa-star':favorite||fav===myfav.id}"></i>
</a>
Mais l'ordre dans lequel les classes sont présentes dans votre fichier CSS aura de l'importance
Le fa-star
la classe s'appliquera soit lorsque favorite
est vraie ou fav===myfav.id
renvoie vrai.
Par conséquent, si après avoir cliqué une fois, supposez que fav===myfav.id
renvoie true et continue de renvoyer true, même lorsque vous cliquez à nouveau, puis la classe fa-star
sera toujours appliqué à partir de ce moment.
Si par défaut favorite
est faux, alors fa-star-o
sera appliqué lors du premier chargement du modèle, mais après le premier clic, lorsque favorite
aura la valeur true, il sera supprimé. Ensuite, au deuxième clic, lorsque favorite
est à nouveau défini sur false, fa-star-o
il sera appliqué mais dans ce cas, fa-star
la classe sera également appliquée en tant que fa===myfav.id
la condition retournerait toujours vraie (en supposant que ce soit le cas).
Par conséquent, vous devrez prioriser la classe qui doit être appliquée avec certitude lorsqu'elle est présente sur l'élément, car un cas peut se produire lorsque les deux classes peuvent être présentes en même temps sur l'élément. Par exemple, si fa-star-o
la classe a une priorité plus élevée, puis placez-la sous le fa-star
dans votre CSS, comme par exemple
.fa-star {
border: 1px solid #F00;
}
.fa-star-o {
border: 1px solid #000;
}
Voir la démonstration de travail sur http://plnkr.co/edit/Dh59KUU41uWpIkHIaYrO?p=preview
Vous pouvez utiliser l'expression avec ng-class
<i class="fa orange" ng-class="favorite || fav == myfav.id ? 'fav' : 'no-fav'"></i>