Mam bardzo dziwny problem. Muszę ustawić klasę active
na odpowiednim <li>
, gdy $scope.selectedCat == cat.id
. Lista jest generowana z ng-repeat. Jeśli selectedCat ma wartość false, pozycja listy "Przeglądaj wszystkie kategorie" (poza ng-repeat) jest ustawiona jako aktywna. setCat()
ustawia wartość zmiennej $scope.selectedCat
:Zmiany stanu klasy ng, ale nie aktualizacji klas
<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>
Po załadowaniu strony, wszystko działa w porządku (snapshot z 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}">
Jednakże kiedy ustawić $ scope.selectedClass do wartości cat.id
, warunek w klasie ng zostanie poprawnie oceniony, ale klasa ng nie zaktualizuje odpowiednio klas:
<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}">
Uwaga t kapelusz w pierwszym wierszu aktywnej klasy pozostaje ustawiony, podczas gdy klasa n to wynik fałszywy. W ostatnim wierszu aktywny nie jest ustawiony, podczas gdy klasa n ma wartość true.
Jakieś pomysły, dlaczego to nie działa? Jaki jest właściwy kątowy sposób robienia tego?
Można również użyć funkcji, która pobiera nazwę klasy, jeśli jest dynamiczny, które mogłyby pomóc, jeśli potrzebujesz zajęcia jak: Active-1 (i -1 zależy od czegoś innego), tylko concat nie odświeży się, jeśli "-1" zmieni się na "-2". – porfiriopartida