多菜单级别 Angular js
Multi-menu level Angular js
我想遍历一个菜单和子菜单数组(可能是子菜单的子菜单)。
我使用Metronic模板(查看此链接的倒数第二项 Metronic模板("多级菜单")
我有这个结构:
$scope.dashitems = [{
title: 'Company',
icon: 'icon-layers',
href: '#/dashboard1',
isActive: path === '/dashboard1'
}, {
title: 'Buildings',
icon: 'icon-layers',
href: '#/Buildings',
isActive: path === '/Buildings'
}, {
title: 'Floors',
icon: 'icon-layers',
href: '#/Floors',
isActive: path === '/Floors'
}, {
title: 'Spaces',
icon: 'icon-layers',
href: 'javascript:;',
isActive: path === '/Spaces',
subitems: [{
title: 'OpenSpaces',
icon: 'icon-layers',
href: '#/OpenSpaces',
isActive: path === '/OpenSpaces',
subitems: [{
title: 'OpenSpaces2',
icon: 'icon-layers',
href: '#/OpenSpaces2',
isActive: path === '/OpenSpaces2',
}]
}, ]
}, {
title: 'Meeting',
icon: 'icon-layers',
href: '#/meeting',
isActive: path === '/meeting'
}];
这不起作用:
function printList(dashitems){
$scope.menu = '<ul>';
angular.forEach(dashitems, function(value, key) {
$scope.menu+="<li>";
if(value.hasOwnProperty('subitems')){
$scope.menu=' <a ng-href="{{ value.href }}" class="nav-link nav-toggle">'+
'<i ng-class="value.icon"></i>'+
'<span class="title">{{ value.title }}</span>'+
'<span class="arrow open"></span>'+
'</a>';
printList(value.subitems);
}else{
$scope.menu+="<a href='javascript:;' class='nav-link nav-toggle'>"+
"<i class='value.icon'></i>"+
"<span class='title'>{{value.title}}</span>"+
"</a></li>";
}
});
$scope.menu += "<ul>";
return $scope.menu;
}
如何遍历此结构并生成与"多级菜单"相同的html?
编辑:
angular
.module('app').directive('menuBar', function() {
return {
restrict: 'E',
controller: ['$scope', '$location', function($scope, $location) {
//function & dashitems
$scope.printList($scope.dashitems);
}]
}
});
您可以创建一个递归创建列表的指令。
<menu ng-model="dashItems"></menu>
该指令应该像这样思考:
- 创建一个函数打印列表(破折号项目)
- 打开 UL 元素
- 迭代破折号项,为每个项生成一个 li 元素
- 如果项目
hasOwnProperty('subItem')
,则以递归方式调用printList(dashItems.subitem)
。 - 最后关闭 ul 元素并返回列表。
现在你只需要做:element.append(printList(dashItems))
这是一种高级方法,但我认为它可能很有用。
编辑:我将帮助您创建函数:
function printList(dashitems){
$scope.menu = '<ul>';
angular.forEach(dashitems, function(value, key) {
$scope.menu+="<li>";
if(value.hasOwnProperty('subitems')){
$scope.menu=' <a ng-href="{{ value.href }}" class="nav-link nav-toggle">'+
'<i ng-class="value.icon"></i>'+
'<span class="title">{{ value.title }}</span>'+
'<span class="arrow open"></span>'+
'</a>';
printList(value.subitems);
}else{
$scope.menu+="<a href='javascript:;' class='nav-link nav-toggle'>"+
"<i class='value.icon'></i>"+
"<span class='title'>{{value.title}}</span>"+
"</a>";
}
$scope.menu+="</li>";
});
$scope.menu += "<ul>";
return $scope.menu;
}
我认为这可能可行
angular
.module('app').directive('menuBar', function() {
return {
restrict: 'E',
scope: {
list: '=dashitems'
}
controller: ['$scope', '$location', function($scope, $location) {
//function & dashitems
$scope.printList($scope.dashitems);
}]
}
});
查看源代码。他们使用Bootstrap来组合一个多级菜单。 您可能最好查看Bootstrap的页面。 他们使用类来安排和设置菜单。 你可以通过 Bootstrap 来完成,或者在 AngularUI 项目中有一个纯的 AngularJS Bootstrap 选项。
您将需要使用指令来迭代您的集合,例如ng-repeat
或其他东西。 您也可以像其他答案建议的那样编写自定义指令。 我发现这一切都归结为偏好问题。 我使用ng-repeat
和嵌套重复一起来创建多级项目。
相关文章:
- Angular JS IE9 Hashbang url rewriting
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- angular.js没有'无法在PhoneGap中处理视图标记
- Angular js-返回一个包含类似
- 如何使用 Angular JS 将数据保存在数据库中
- 将Angular js与taglib结合使用
- Angular JS Filter-通过3个复选框进行筛选
- vaadin:使用自定义布局集成angular js
- angular js密码强度显示问题
- 使用angular.js问题的JavaSpringREST服务
- 将复杂对象从angular js传递到web api,它总是返回404
- entre上的angular js阻止提交
- 根据Angular.JS上一次的内容禁用选择
- 如何在angular js中使用指令.不适用于我的情况,为什么
- 预期响应包含一个对象,但在angular js中得到一个数组错误
- angular.js:13424错误:[ng:areq]参数'fn'不是函数,getObject
- 使用Angular js-量角器e2e测试上传文件
- Angular.js延迟控制器初始化
- 如何在angular.js中动态应用自定义过滤器
- 谷歌地图/Angular JS:地图更新并不总是反映数据,并且可以't删除标记