Прежде всего, эту проблему можно решить разными способами. Этот способ может быть не самым элегантным, но он определенно работает.
Вот простое решение, которое вы сможете добавить в любой проект. Вы можете просто добавить pageKey или другое свойство при настройке маршрута, которое вы можете использовать для отключения. Кроме того, вы можете реализовать прослушиватель в методе $ routeChangeSuccess объекта $ route, чтобы отслеживать успешное завершение изменения маршрута.
Когда ваш обработчик запускается, вы получаете ключ страницы и используете этот ключ для поиска элементов, которые должны быть «АКТИВНЫМИ» для этой страницы, и вы применяете класс ACTIVE.
Имейте в виду, что вам нужен способ сделать ВСЕ элементы «АКТИВНЫМИ». Как видите, я использую класс .pageKey для своих элементов навигации, чтобы отключить их все, и я использую .pageKey_ {PAGEKEY} для их индивидуального включения. Переключение их всех в неактивное состояние будет считаться наивным подходом, потенциально вы могли бы повысить производительность, используя предыдущий маршрут, чтобы сделать неактивными только активные элементы, или вы могли бы изменить селектор jquery, чтобы выбрать только активные элементы, которые нужно сделать неактивными. Использование jquery для выбора всех активных элементов, вероятно, является лучшим решением, поскольку оно гарантирует, что все будет очищено для текущего маршрута в случае каких-либо ошибок css, которые могли присутствовать на предыдущем маршруте.
Это означало бы изменить эту строку кода:
$(".pagekey").toggleClass("active", false);
к этому
$(".active").toggleClass("active", false);
Вот пример кода:
Учитывая загрузочную панель навигации
<div class="navbar navbar-inverse">
<div class="navbar-inner">
<a class="brand" href="#">Title</a>
<ul class="nav">
<li><a href="#!/" class="pagekey pagekey_HOME">Home</a></li>
<li><a href="#!/page1/create" class="pagekey pagekey_CREATE">Page 1 Create</a></li>
<li><a href="#!/page1/edit/1" class="pagekey pagekey_EDIT">Page 1 Edit</a></li>
<li><a href="#!/page1/published/1" class="pagekey pagekey_PUBLISH">Page 1 Published</a></li>
</ul>
</div>
</div>
И угловой модуль и контроллер вроде следующего:
<script type="text/javascript">
function Ctrl($scope, $http, $routeParams, $location, $route) {
}
angular.module('BookingFormBuilder', []).
config(function ($routeProvider, $locationProvider) {
$routeProvider.
when('/', {
template: 'I\'m on the home page',
controller: Ctrl,
pageKey: 'HOME' }).
when('/page1/create', {
template: 'I\'m on page 1 create',
controller: Ctrl,
pageKey: 'CREATE' }).
when('/page1/edit/:id', {
template: 'I\'m on page 1 edit {id}',
controller: Ctrl, pageKey: 'EDIT' }).
when('/page1/published/:id', {
template: 'I\'m on page 1 publish {id}',
controller: Ctrl, pageKey: 'PUBLISH' }).
otherwise({ redirectTo: '/' });
$locationProvider.hashPrefix("!");
}).run(function ($rootScope, $http, $route) {
$rootScope.$on("$routeChangeSuccess",
function (angularEvent,
currentRoute,
previousRoute) {
var pageKey = currentRoute.pageKey;
$(".pagekey").toggleClass("active", false);
$(".pagekey_" + pageKey).toggleClass("active", true);
});
});
</script>
person
Mark At Ramp51
schedule
24.04.2013