Używam routingu AngularUI i chciałbym to zrobić, ng-class="{active: current.state}"
ale nie jestem pewien, jak dokładnie wykryć bieżący stan w takiej dyrektywie.
Używam routingu AngularUI i chciałbym to zrobić, ng-class="{active: current.state}"
ale nie jestem pewien, jak dokładnie wykryć bieżący stan w takiej dyrektywie.
Odpowiedzi:
Aktualizacja:
Ta odpowiedź dotyczy znacznie starszej wersji Ui-Router. W przypadku nowszych wersji (0.2.5+), użyj dyrektywy helper ui-sref-active
. Szczegóły tutaj .
Oryginalna odpowiedź:
Dołącz usługę $ state do kontrolera. Możesz przypisać tę usługę do właściwości w swoim zakresie.
Przykład:
$scope.$state = $state;
Następnie, aby uzyskać aktualny stan w swoich szablonach:
$state.current.name
Aby sprawdzić, czy stan jest obecnie aktywny:
$state.includes('stateName');
Ta metoda zwraca wartość true, jeśli stan jest uwzględniony, nawet jeśli jest częścią stanu zagnieżdżonego. Gdybyś był w stanie zagnieżdżonym user.details
i sprawdzałeś $state.includes('user')
, zwróciłoby to prawdę.
W swoim przykładzie klasowym zrobiłbyś coś takiego:
ng-class="{active: $state.includes('stateName')}"
Jeśli używasz ui-router, spróbuj $ state.is ();
Możesz go używać w ten sposób:
$state.is('stateName');
Zgodnie z dokumentacją:
$ state.is ... podobny do $ state.includes, ale sprawdza tylko pełną nazwę stanu.
Użycie dyrektywy ui-sref-active, która działała dla mnie, to:
<li ui-sref-active="{'active': 'admin'}">
<a ui-sref="admin.users">Administration Panel</a>
</li>
jak znaleziono tutaj pod komentarzem oznaczonym jako „tgrant59 skomentował 31 maja 2016 r.”.
Używam angular-ui-router v0.3.1.
Sprawdź angular-ui, a konkretnie sprawdzanie tras: http://angular-ui.github.io/ui-utils/