J'utilise angular-ui-router
et les états imbriqués dans mon application et j'ai également une barre de navigation. La barre de navigation est écrite à la main et utilise ui-sref-active
pour mettre en évidence l’état actuel. C'est une barre de navigation à deux niveaux.
Maintenant, quand je suis dans, disons Products / Categories
Je voudrais que Products
(au niveau 1) et Categories
(au niveau 2) soient mis en évidence. Cependant, en utilisant ui-sref-active
, si je suis dans l'état Products.Categories
, seul cet état est mis en surbrillance, pas Products
.
Existe-t-il un moyen de mettre Products
en surbrillance dans cet état?
Au lieu de cela-
<li ui-sref-active="active">
<a ui-sref="posts.details">Posts</a>
</li>
Tu peux le faire-
<li ng-class="{active: $state.includes('posts')}">
<a ui-sref="posts.details">Posts</a>
</li>
Actuellement ça ne marche pas. Une discussion est en cours ici ( https://github.com/angular-ui/ui-router/pull/927 ) et elle sera bientôt ajoutée.
METTRE À JOUR:
Pour que cela fonctionne, $state
doit être disponible dans la vue.
angular.module('xyz').controller('AbcController', ['$scope', '$state', function($scope, $state) {
$scope.$state = $state;
}]);
UPDATE [2]:
À partir de la version 0.2.11
, cela fonctionne immédiatement. Veuillez vérifier le numéro associé: https://github.com/angular-ui/ui-router/issues/818
Voici une option pour imbriquer plusieurs états non liés hiérarchiquement et pour lesquels vous n'avez pas de contrôleur disponible pour la vue. Vous pouvez utiliser le filtre UI-Router includedByState pour vérifier votre état actuel par rapport à un nombre quelconque d'états nommés.
<a ui-sref="production.products" ng-class="{active: ('production.products' |
includedByState) || ('planning.products' | includedByState) ||
('production.categories' | includedByState) ||
('planning.categories' | includedByState)}">
Items
</a>
TL; DR: Plusieurs états nommés non liés doivent appliquer une classe active sur le même lien et vous n'avez pas de contrôleur? Utilisez includedByState .
Voici la solution:
<li class="myNonActiveStyle" ui-sref-active="myActiveStyle">
<a ui-sref="project.details">Details</a>
</li>
Modifier:
Ce qui précède ne fonctionne que pour le chemin d’itinéraire exact et n’appliquera pas le style actif aux itinéraires imbriqués. Cette solution devrait fonctionner pour cela:
<a data-ui-sref="root.parent" data-ng-class="{ active: $state.includes('root.parent') }">Link</a>
So Simple, Étape 1: Ajoutez un contrôleur pour votre barre de navigation ou dans votre contrôleur existant où la barre de navigation est incluse ajoutez les éléments suivants
app.controller('navCtrl', ['$scope', '$location', function($scope, $location) {
$scope.isActive = function(destination) {
return destination === $location.path();
}
}]);
Étape 2: dans votre barre de navigation
<li ng-class="{active: isActive('/home')}"><a ui-sref="app.home">Browse Journal</a></li>
C'est tout.
Routeur UI. Extrait de code pour rendre votre barre de navigation active.
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);
}
Inside courseView.HTML
<button type="button" ui-sref="blog" class="btn btn-primary">Next</button>
Ce bouton est présent dans le cours View qui vous permet de naviguer vers le prochain blog View. et met votre barre de navigation en surbrillance.
trouvez un exemple similaire, une application de démonstration de routeur ui angulaire: https://github.com/vineetsagar7/Angualr-UI-Router
Mon code est passé de/productGroups à/productPartitions, qui est le seul moyen d'accéder à la vue "productPartitions".
J'ai donc ajouté une ancre masquée avec ui-sref également défini sur "productPartitions" dans le même élément de liste contenant 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>
Maintenant, le bouton de navigation productGroups reste actif lorsque vous accédez à l'une ou l'autre des vues.
Voici ce que j'ai fait pour atteindre le même objectif. L'état parent est "app.message" et ne déclare pas comme abstrait.
Les états enfants sont "app.message.draft", "app.message.all", "app.message.sent".
Mon lien de navigation -
<a ui-sref-active="active-menu" ui-sref="app.message">Messages</a>
Définissez les itinéraires/liens de vos enfants.
et mettre à jour en configuration
$rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {
if (toState.name === 'app.message') {
event.preventDefault();
$state.go('app.message.draft');
return;
}
});