<accordion close-others="true">
<accordion-group class="operactr-column" ng-repeat="item in menuItems track by $index" is-open="open[item.id]" ng-init="open[item.id] = false">
//此处的变量初始化必须有,否则循环当中会把open[item.id]作为局部变量
<accordion-heading>
<ul>
<li>
<!--ng-click="iconToggle('userManage')"-->
<span class="toggleIcon" ng-class="{'iconBottom':isOpenUserManage,'iconRight':!isOpenUserManage}"></span>
<!--<span ng-class="'fa ' + item.icon"></span>-->
<span class="icon2"></span>
<span>{{item.name}}</span>
</li>
</ul>
</accordion-heading>
<ul class="navigation" ng-if="item.children.length > 0">
<li ng-onmouseover="this.style.backgroundColor='red'" style="padding-left: 60px;" ng-class="{'selected': (selectedPage == (subItem.serviceName + subItem.queryParams))}" ng-init="(selectedPage == (subItem.serviceName + subItem.queryParams))?(open[item.id] = true):''" ng-repeat="subItem in item.children track by $index" ng-if="subItem.isEnabled">
//selectedPage == (subItem.serviceName + subItem.queryParams)为true时表明菜单为选中状态。此处利用了 && 的短路特性,给open[item.id]赋值为true,标记菜单的展开状态
//ng-class="{'selected': (selectedPage == (subItem.serviceName + subItem.queryParams)) && (open[item.id] = true)}"纠正一下,这种写法有bug,改成上面那种就可以了
<!--<span ng-class="'fa ' + subItem.icon"></span>-->
<span class="icon3" ng-class="{'active': selectedPage == subItem.serviceName + subItem.queryParams}"></span>
<a ng-class="{'selected': selectedPage == subItem.serviceName + subItem.queryParams}" ng-href="#/inteSearch/list/{{subItem.serviceName + subItem.queryParams}}" title="{{subItem.name}}" ng-click="selectPage(subItem.serviceName + subItem.queryParams)">{{subItem.name}}</a>
</li>
</ul>
</accordion-group>
</accordion>
/**
* 选中菜单
*/
$scope.selectPage = function(itemName){
$scope.selectedPage = itemName;
}
/**
* 刷新页面时选中菜单
*/
function initSelectedPage(){
var url = $location.url();
if(url == "/inteSearch/admin"){
$scope.selectedPage = "admin";
}else{
$scope.selectedPage = url.split("/")[3];
}
}
说明一下,这是一个二级菜单。默认为收起状态,选中的菜单项高亮显示。并且该项的父级为展开状态。写的很乱,意思表达不出来,意会吧~