Si vous avez plusieurs menus avec sous-menus, vous pouvez utiliser la solution ci-dessous.
HTML
<ul class="sidebar-menu" id="nav-accordion">
<li class="sub-menu">
<a href="" ng-click="hasSubMenu('dashboard')">
<i class="fa fa-book"></i>
<span>Dashboard</span>
<i class="fa fa-angle-right pull-right"></i>
</a>
<ul class="sub" ng-show="showDash">
<li><a ng-class="{ active: isActive('/dashboard/loan')}" href="#/dashboard/loan">Loan</a></li>
<li><a ng-class="{ active: isActive('/dashboard/recovery')}" href="#/dashboard/recovery">Recovery</a></li>
</ul>
</li>
<li class="sub-menu">
<a href="" ng-click="hasSubMenu('customerCare')">
<i class="fa fa-book"></i>
<span>Customer Care</span>
<i class="fa fa-angle-right pull-right"></i>
</a>
<ul class="sub" ng-show="showCC">
<li><a ng-class="{ active: isActive('/customerCare/eligibility')}" href="#/CC/eligibility">Eligibility</a></li>
<li><a ng-class="{ active: isActive('/customerCare/transaction')}" href="#/CC/transaction">Transaction</a></li>
</ul>
</li>
</ul>
Il y a deux fonctions que j'ai appelées en premier: ng-click = hasSubMenu ('dashboard'). Cette fonction sera utilisée pour basculer le menu et elle est expliquée dans le code ci-dessous. Le ng-class = "{active: isActive ('/ customerCare / transaction')} il ajoutera une classe active à l'élément de menu actuel.
Maintenant, j'ai défini certaines fonctions dans mon application:
Tout d'abord, ajoutez une dépendance $ rootScope qui est utilisée pour déclarer des variables et des fonctions. Pour en savoir plus sur $ roootScope, consultez le lien: https://docs.angularjs.org/api/ng/service/ $ rootScope
Voici mon fichier d'application:
$rootScope.isActive = function (viewLocation) {
return viewLocation === $location.path();
};
La fonction ci-dessus est utilisée pour ajouter une classe active à l'élément de menu actuel.
$rootScope.showDash = false;
$rootScope.showCC = false;
var location = $location.url().split('/');
if(location[1] == 'customerCare'){
$rootScope.showCC = true;
}
else if(location[1]=='dashboard'){
$rootScope.showDash = true;
}
$rootScope.hasSubMenu = function(menuType){
if(menuType=='dashboard'){
$rootScope.showCC = false;
$rootScope.showDash = $rootScope.showDash === false ? true: false;
}
else if(menuType=='customerCare'){
$rootScope.showDash = false;
$rootScope.showCC = $rootScope.showCC === false ? true: false;
}
}
Par défaut, $ rootScope.showDash et $ rootScope.showCC sont définis sur false. Cela mettra les menus fermés lors du chargement initial de la page. Si vous avez plus de deux sous-menus, ajoutez en conséquence.
La fonction hasSubMenu () fonctionnera pour basculer entre les menus. J'ai ajouté une petite condition
if(location[1] == 'customerCare'){
$rootScope.showCC = true;
}
else if(location[1]=='dashboard'){
$rootScope.showDash = true;
}
il restera le sous-menu ouvert après le rechargement de la page en fonction de l'élément de menu sélectionné.
J'ai défini mes pages comme:
$routeProvider
.when('/dasboard/loan', {
controller: 'LoanController',
templateUrl: './views/loan/view.html',
controllerAs: 'vm'
})
Vous ne pouvez utiliser la fonction isActive () que si vous avez un seul menu sans sous-menu. Vous pouvez modifier le code selon vos besoins. J'espère que cela aidera. Passez une bonne journée :)