Как определить текущее состояние в директиве

Я использую маршрутизацию AngularUI, и я бы хотел сделать ng-class="{active: current.state}", но я не уверен, как точно определить текущее состояние в такой директиве.

Ответ 1

Также вы можете использовать директиву ui-sref-active:

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

Или фильтры: "stateName" | isState и "stateName" | includedByState

Ответ 2

Update:

Этот ответ был для гораздо более ранней версии Ui-Router. Для более поздних выпусков (0.2.5+) используйте вспомогательную директиву ui-sref-active. Подробнее здесь.


Исходный ответ:

Включите $state службу в свой контроллер. Вы можете назначить эту службу свойству в своей области.

Пример:

$scope.$state = $state;

Затем, чтобы получить текущее состояние в ваших шаблонах:

$state.current.name

Чтобы проверить, активно ли состояние:

$state.includes('stateName'); 

Этот метод возвращает true, если состояние включено, даже если оно является частью вложенного состояния. Если вы были в вложенном состоянии, user.details, и вы отметили $state.includes('user'), он вернет true.

В вашем примере класса вы сделали бы что-то вроде этого:

ng-class="{active: $state.includes('stateName')}"

Ответ 3

Если вы используете ui-router, попробуйте $state.is();

Вы можете использовать его так:

$state.is('stateName');

Документация

Ответ 5

Использование директивы ui-sref-active, которая работала для меня:

<li ui-sref-active="{'active': 'admin'}">
    <a ui-sref="admin.users">Administration Panel</a>
</li>

как найдено здесь в комментарии, отмеченном "tgrant59, прокомментированный 31 мая 2016 года".

Я использую angular -ui-router v0.3.1.