Любая конкретная причина, почему мой код не работает?
<li ng-class="{active : $state.includes('products')}">
код маршрутизатора:
.state('products', {
url: '/products',
templateUrl: 'app/components/views/products/products.html',
controller: 'productsController',
controllerAs: 'products'
})
Вы забываете установить $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: Я лично не рекомендую этот глобальный подход, но он имеет свои достоинства
вам нужно будет получить провайдера $ 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'}">
$scope.$state = $state;
?