Jak wykryć aktualny stan w ramach dyrektywy

86

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.

Sieć internetowa
źródło

Odpowiedzi:

115

Możesz także użyć dyrektywy ui-sref-active :

<ul>
  <li ui-sref-active="active" class="item">
    <a href ui-sref="app.user({user: 'bilbobaggins'})">@bilbobaggins</a>
  </li>
  <!-- ... -->
</ul>

Lub filtry: "stateName" | isState&"stateName" | includedByState

darthwade
źródło
146

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.detailsi 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')}"
Cuong Vo
źródło
3
A co ze stanami, które mają parametry?
Bradley Trager
25

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.

Clement Hoang
źródło
1

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.

jaycer
źródło