Tout d'abord, ce problème peut être résolu de plusieurs façons. Cette méthode n'est peut-être pas la plus élégante, mais elle est certainement efficace.
Voici une solution simple que vous devriez pouvoir ajouter à tout projet. Il vous suffit d'ajouter une "pageKey" ou une autre propriété lors de la configuration de votre itinéraire, que vous pouvez utiliser comme clé. De plus, vous pouvez implémenter un écouteur sur la méthode $routeChangeSuccess de l'objet $route pour écouter l'achèvement réussi d'un changement d'itinéraire.
Lorsque votre gestionnaire se déclenche, vous obtenez la clé de la page, et vous utilisez cette clé pour localiser les éléments qui doivent être "ACTIFS" pour cette page, et vous appliquez la classe ACTIVE.
Gardez à l'esprit que vous devez trouver un moyen de rendre TOUS les éléments "ACTIFS". Comme vous pouvez le voir, j'utilise la classe .pageKey sur mes éléments de navigation pour les désactiver tous, et j'utilise la classe .pageKey_{PAGEKEY} pour les activer individuellement. Les rendre tous inactifs serait considéré comme une approche naïve, vous obtiendriez potentiellement de meilleures performances en utilisant la route précédente pour ne rendre inactifs que les éléments actifs, ou vous pourriez modifier le sélecteur jquery pour ne sélectionner que les éléments actifs à rendre inactifs. L'utilisation de jquery pour sélectionner tous les éléments actifs est probablement la meilleure solution, car elle garantit que tout est nettoyé pour la route actuelle en cas de bogues css qui auraient pu être présents sur la route précédente.
Ce qui voudrait dire changer cette ligne de code :
$(".pagekey").toggleClass("active", false);
à celui-ci
$(".active").toggleClass("active", false);
Voici un exemple de code :
Avec une barre de navigation bootstrap de
<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>
Et un module angulaire et un contrôleur comme le suivant :
<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>
0 votes
Duplicata possible de Rendre actif le lien de la barre navale de Twitter Bootstrap
10 votes
C'est similaire, mais ce n'est pas une "manière angulaire" de mettre en évidence les boutons de navigation.
0 votes
Duplicata possible de Définir le style de l'onglet actif avec AngularJS
0 votes
Si vous utilisez Routage angulaire veuillez noter que la réponse parfaite est enterrée plus bas : stackoverflow.com/a/43822400/474189 .