Угловой - класса в зависимости от состояния

0

Любая конкретная причина, почему мой код не работает?

<li ng-class="{active : $state.includes('products')}">

код маршрутизатора:

.state('products', {
  url: '/products',
  templateUrl: 'app/components/views/products/products.html',
  controller: 'productsController',
  controllerAs: 'products'
})
  • 0
    Вы должны добавить свой контроллер. В контроллере есть что-то вроде: $scope.$state = $state; ?
  • 0
    Вы уверены, что правильно ссылаетесь на название своего штата? Возможно добавьте свой код роутера к вопросу
Показать ещё 2 комментария
Теги:
state
ng-class

2 ответа

3
Лучший ответ

Вы забываете установить $state и $stateParams на свой $rootScope, если вы это сделаете, вы можете продолжать использовать свой первый подход в html:

angular.module("myApp").run(function ($rootScope, $state, $stateParams) {
    $rootScope.$state = $state;
    $rootScope.$stateParams = $stateParams;
});

Таким образом, вам не нужно вводить их на каждый контроллер.

Вот ссылка: https://github.com/angular-ui/ui-router/wiki/quick-reference#note-about-using-state-within-a-template

PS: Я лично не рекомендую этот глобальный подход, но он имеет свои достоинства

2

вам нужно будет получить провайдера $ state через инжектор $ в вашем контроллере (так как вы будете вводить себе $ scope или службу.

РЕДАКТИРОВАТЬ:

Включите его как таковое:

 angular.module('yourModule', []).controller('YourController',['$injector',
     funciton($injector){}
 ]);

Затем:

$scope.$state = $injector.get('$state');

Теперь у вас есть доступ к $ state. Чтобы получить имя вашего текущего состояния, просто используйте:

 $state.current.name

Пример:

 <li ng-class="{active : $state.current.name === 'products'}">

Ещё вопросы

Сообщество Overcoder
Наверх
Меню