Jeśli masz wiele menu z podmenu, możesz skorzystać z poniższego rozwiązania.
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>
Dwie funkcje, które najpierw wywołałem, to ng-click = hasSubMenu ('dashboard'). Ta funkcja będzie używana do przełączania menu i jest wyjaśniona w poniższym kodzie. Ng-class = "{active: isActive ('/ customerCare / transaction')} doda klasę aktywną do bieżącej pozycji menu.
Teraz zdefiniowałem kilka funkcji w mojej aplikacji:
Najpierw dodaj zależność $ rootScope, która jest używana do deklarowania zmiennych i funkcji. Aby dowiedzieć się więcej o $ roootScope, skorzystaj z łącza: https://docs.angularjs.org/api/ng/service/ $ rootScope
Oto mój plik aplikacji:
$rootScope.isActive = function (viewLocation) {
return viewLocation === $location.path();
};
Powyższa funkcja służy do dodawania aktywnej klasy do bieżącej pozycji menu.
$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;
}
}
Domyślnie $ rootScope.showDash i $ rootScope.showCC są ustawione na false. Spowoduje to zamknięcie menu po pierwszym załadowaniu strony. Jeśli masz więcej niż dwa podmenu, dodaj odpowiednio.
Funkcja hasSubMenu () będzie działać do przełączania się między menu. Dodałem mały warunek
if(location[1] == 'customerCare'){
$rootScope.showCC = true;
}
else if(location[1]=='dashboard'){
$rootScope.showDash = true;
}
podmenu pozostanie otwarte po przeładowaniu strony zgodnie z wybraną pozycją menu.
Moje strony zdefiniowałem w następujący sposób:
$routeProvider
.when('/dasboard/loan', {
controller: 'LoanController',
templateUrl: './views/loan/view.html',
controllerAs: 'vm'
})
Funkcji isActive () możesz używać tylko wtedy, gdy masz jedno menu bez podmenu. Możesz zmodyfikować kod zgodnie z wymaganiami. Mam nadzieję, że to pomoże. Miłego dnia :)