我在一个基于付费网站主题的Angular应用程序中,我的侧边栏菜单项具有以下数据结构。该数据结构是我自己定义的,菜单从原始菜单视图派生而来,其中所有项目都是硬编码在ul
中。
在SidebarController.js
中:
$scope.menuItems = [
{
"isNavItem": true,
"href": "#/dashboard.html",
"text": "Dashboard"
},
{
"isNavItem": true,
"href": "javascript:;",
"text": "AngularJS Features",
"subItems": [
{
"href": "#/ui_bootstrap.html",
"text": " UI Bootstrap"
},
...
]
},
{
"isNavItem": true,
"href": "javascript:;",
"text": "jQuery Plugins",
"subItems": [
{
"href": "#/form-tools",
"text": " Form Tools"
},
{
"isNavItem": true,
"href": "javascript:;",
"text": " Datatables",
"subItems": [
{
"href": "#/datatables/managed.html",
"text": " Managed Datatables"
},
...
]
}
]
}
];
然后我有以下的局部视图,绑定到该模型如下:
<ul class="page-sidebar-menu" data-keep-expanded="false" data-auto-scroll="true" data-slide-speed="200" ng-class="{'page-sidebar-menu-closed': settings.layout.pageSidebarClosed}">
<li ng-repeat="item in menuItems" ng-class="{'start': item.isStart, 'nav-item': item.isNavItem}">
<a href="{{item.href}}" ng-class="{'nav-link nav-toggle': item.subItems && item.subItems.length > 0}">
<span class="title">{{item.text}}</span>
</a>
<ul ng-if="item.subItems && item.subItems.length > 0" class="sub-menu">
<li ng-repeat="item in item.subItems" ng-class="{'start': item.isStart, 'nav-item': item.isNavItem}">
<a href="{{item.href}}" ng-class="{'nav-link nav-toggle': item.subItems && item.subItems.length > 0}">
<span class="title">{{item.text}}</span>
</a>
</li>
</ul>
</li>
</ul>
注意:在视图绑定中,您可能会看不到模型中的某些$scope
属性(或反之亦然),但这是因为我已经编辑过它们以减少篇幅。
现在,由于第二级li
没有包含自己的有条件的ul
,所以在Datatable
菜单项下的子项目不会被渲染。
我该如何创建一个视图或模板,或两者兼备,以递归地绑定到模型,这样所有子项目和子项目的子项目都可以被渲染?通常只需要四个层级。
item
既是第一个循环的项又是第二个循环的项,这种情况非常难以调试,将其重命名为subItem
或其他名称。[编辑]当我把你的代码复制到plunker时,它立即工作了:http://plnkr.co/edit/P8zJWJO9jXtKu2Yt97TR?p=preview - maurycy