Я использую angular-ui-router
вложенные состояния в своем приложении, а также у меня есть панель навигации. Панель навигации написана от руки и используется ui-sref-active
для выделения текущего состояния. Это двухуровневая панель навигации.
Теперь, когда я нахожусь внутри, скажем, Products / Categories
я хочу, чтобы были выделены и Products
(на уровне 1), и Categories
(на уровне 2). Однако при использовании ui-sref-active
, если я нахожусь в состоянии, Products.Categories
то выделяется только это состояние, а не Products
.
Есть ли способ сделать Products
подсветку в этом состоянии?
$state
специально сделали доступным в прицеле вот так$rootScope.$state = $state
?$rootScope
но это исключение.$scope.includes = $state.includes
), а не прикрепил весь$state
.Это вариант, когда вы вкладываете несколько состояний, которые не связаны иерархически, и у вас нет контроллера, доступного для представления. Вы можете использовать фильтр UI-Router includedByState для проверки вашего текущего состояния на соответствие любому количеству именованных состояний.
<a ui-sref="production.products" ng-class="{active: ('production.products' | includedByState) || ('planning.products' | includedByState) || ('production.categories' | includedByState) || ('planning.categories' | includedByState)}"> Items </a>
TL; DR: несколько несвязанных именованных состояний должны применять активный класс к одной и той же ссылке, а у вас нет контроллера? Используйте includedByState .
источник
State
. Также, если вы создаете родительский пункт меню в ссылке меню и не хотите создавать другойState
только ради использованияui-sref-active
функции. Я считаю, чтоState
они предназначены для размещения HTML, а не для использования в ссылках меню.Это решение:
<li class="myNonActiveStyle" ui-sref-active="myActiveStyle"> <a ui-sref="project.details">Details</a> </li>
Редактировать:
Вышеупомянутое работает только для точного пути маршрута и не будет применять activeStyle к вложенным маршрутам. Это решение должно работать для этого:
<a data-ui-sref="root.parent" data-ng-class="{ active: $state.includes('root.parent') }">Link</a>
источник
data-ng-class="{ active: $state.includes('root.parent')
к каждой из ссылок? Гдеactive
имя класса.Допустим, дерево URL-адресов выглядит следующим образом:
app (for home page) -> app.products -> app.products.category
Использование:
<li ui-sref-active="active"> <a ui-sref="app.products">Products</a> </li>
Теперь при нажатии на
products
: активными будут только продукты.если вы нажмете на
category
: будут активны и продукты, и категория.если вы хотите, чтобы при нажатии на нее была активна только категория, вы должны использовать:
ui-sref-active-eq
для продуктов, что означает, что будет активна только категория, а не дочерние элементы.правильное использование в app.js:
angular.module('confusionApp', ['ui.router']) .config(function($stateProvider, $urlRouterProvider) { $stateProvider // route for the home page .state('app', { url:'/', views: { ... } }) // route for the aboutus page .state('app.products', { url:'products', views: { ... } }) // route for the contactus page .state('app.products.category', { url:'category', views: { ... } }) $urlRouterProvider.otherwise('/'); });
источник
ui-sref-active-eq
работает отлично!Так просто, шаг 1: добавьте контроллер для панели навигации или в существующий контроллер, в который включена панель навигации, добавьте следующее
app.controller('navCtrl', ['$scope', '$location', function($scope, $location) { $scope.isActive = function(destination) { return destination === $location.path(); } }]);
Шаг 2: на панели навигации
<li ng-class="{active: isActive('/home')}"><a ui-sref="app.home">Browse Journal</a></li>
Это оно.
источник
Маршрутизатор пользовательского интерфейса . Фрагмент кода для активации панели навигации.
HTML
<li ui-sref-active="is-active" ui-nested><a ui-sref="course">Courses</a> </li> <li ui-sref-active="is-active" ui-nested><a ui-sref="blog">blog</a></li>
CSS
is-active{ background-color: rgb(28,153,218); }
Внутри courseView.HTML
<button type="button" ui-sref="blog" class="btn btn-primary">Next</button>
Эта кнопка присутствует в представлении курса, которое позволяет перейти к следующему представлению, то есть блогу. и выделяет панель навигации.
найдите аналогичный пример, демонстрационное приложение angular ui-router: https://github.com/vineetsagar7/Angualr-UI-Router
источник
Мой код перешел из / productGroups в / productPartitions, что является единственным способом получить доступ к представлению «productPartitions».
Поэтому я добавил скрытую привязку с ui-sref, также установленным на "productPartitions" в том же элементе списка, который имеет ui-sref-active.
<li ui-sref-active="active"> <a ui-sref="productGroups"> <i class="fa fa-magic"></i> Product groups </a> <a ui-sref="productPartitions" style="display:none;"></a> </li>
Теперь кнопка навигации productGroups остается активной при доступе к любому представлению
источник
Вот что я сделал, чтобы добиться того же. Родительское состояние - «app.message» и не объявляется абстрактным.
Дочерние состояния - это «app.message.draft», «app.message.all», «app.message.sent».
Моя навигационная ссылка -
<a ui-sref-active="active-menu" ui-sref="app.message">Messages</a>
Определите маршруты / ссылки для ваших детей.
и обновить в config-
$rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) { if (toState.name === 'app.message') { event.preventDefault(); $state.go('app.message.draft'); return; } });
источник