J'ai un problème très étrange. Je dois définir une classe active
sur le <li>
Approprié lorsque le $scope.selectedCat == cat.id
. La liste est générée avec ng-repeat. Si selectedCat est faux, l'élément de liste "Parcourir toutes les catégories" (en dehors de ng-repeat) est défini sur actif. setCat()
définit la valeur de la variable $scope.selectedCat
:
<div id="cat-list" ng-controller="CatController">
<li ng-class="{'active': {{selectedCat == false}}}">
<a>
<div class="name" ng-click="setCat(false)" >Browse All Categories</div>
</a>
</li>
<li class="has-subcat" ng-repeat="cat in cats | filter:catsearch" ng-class="{'active': {{selectedCat == cat.id}}}">
<a>
<div cat class="name" ng-click="setCat({{cat.id}})" ng-bind-html="cat.name | highlight:catsearch"></div>
</a>
</li>
</div>
Lorsque la page se charge, tout fonctionne bien (instantané de FireBug):
<li ng-class="{'active': true}" class="ng-scope active">
<!-- ngRepeat: cat in cats | filter:catsearch -->
<li class="has-subcat ng-isolate-scope" ng-repeat="cat in cats | filter:catsearch" ng-class="{'active': false}">
Cependant, lorsque j'ai défini $ scope.selectedClass sur une valeur cat.id
, La condition dans ng-class est évaluée correctement, mais ng-class ne mettra pas à jour les classes en conséquence:
<li ng-class="{'active': false}" class="ng-scope active"> <!--Right here!-->
<!-- ngRepeat: cat in cats | filter:catsearch -->
<li class="has-subcat ng-isolate-scope" ng-repeat="cat in cats | filter:catsearch" ng-class="{'active': true}">
Veuillez noter que dans la première ligne, la classe active reste définie, tandis que la classe ng est évaluée à false. Dans la dernière ligne, active n'est pas définie, tandis que ng-class prend la valeur true.
Des idées pourquoi cela ne fonctionne pas? Quelle est la bonne façon de faire Angular?
Remplacer:
ng-class="{'active': {{selectedCat == cat.id}}}"
Avec:
ng-class="{'active': selectedCat == cat.id}"
Vous n'avez jamais besoin d'imbriquer ces accolades comme ça, dans Angular.
Jetez un oeil à la ng-class
documentation pour d'autres exemples.
Au lieu de
ng-class="{'active': {{selectedCat == cat.id}}}"
utilisation
ng-class="{active: selectedCat == cat.id}"
Salut, je suis également confronté au même problème. j'ai résolu le problème au fait au lieu d'attribuer la valeur directement à ng-class, appelez la méthode séparée et retournez la valeur.
ex:
ng-class="getStyleClass(cat)"
$scope.getStyleClass = function(cat) {
return "active: selectedCat == cat.id";
}
à peu près j'ai codé. veuillez modifier la méthode selon vos besoins.
En développant la réponse @Cerbrus a donné:
Remplacer:
ng-class="{'active': {{selectedCat == cat.id}}}"
Avec:
ng-class="{'active': selectedCat == cat.id}"
J'ai eu un problème avec une expression utilisant un filtre, qui ne serait pas évaluée correctement sans accolades doubles {{ }}
.
Exemple: ng-class="{'active': {{ selectedCat | filter:catType }} == cat.id}"
Je l'ai résolu en mettant des parenthèses à la place des accolades.
Solution: ng-class="{'active': ( selectedCat | filter:catType ) == cat.id}"
L'avez-vous résolu?
À mon avis, vous devriez utiliser
ng-class="{'active': {{controller.selectedCat == cat.id}}}"
Avec:
ng-class="{'active': controller.selectedCat == cat.id}"
cela vous aidera.