gpt4 book ai didi

javascript - 如何使用 Angular JS 递归迭代具有未知层次结构的对象?

转载 作者:行者123 更新时间:2023-11-30 17:29:49 26 4
gpt4 key购买 nike

举个例子:

http://jsfiddle.net/7U5Pt/

这里我有一个描述(非常基本的)菜单的对象。每个项目都可以有多个子级,这些子级可能具有无限的层次结构。ng-repeat我用来把它变成 <ul><li> 的指令元素在前两个级别上工作正常,但在层次结构的第三个或任何后续级别上效果不佳。

递归迭代这个对象的最佳方式是什么,处理无限级别的 child ?

非常感谢任何帮助!

这是 fiddle 消失时的代码:

HTML:

<div ng-app="myApp">
<div ng-controller="myCtrl">
<nav class="nav-left">
<ul ng-repeat="item in mytree.items">
<li>NAME: {{ item.name }}
<ul ng-repeat="item in item.children.items">
<li>SUB NAME: {{ item.name }}</li>
</ul>
</li>
</ul>
</nav>
</div>

JS:

var myApp = angular.module('myApp', []);

myApp.controller('myCtrl', function ($scope) {
$scope.mytree = {
"items": [{
"name": "one",
"children": {
"items": [
{
"name": "one sub a",
"children": {
"items": [{
"name": "one sub level two a"
},
{
"name": "one sub level two b"
}]
}
},
{
"name": "one sub b"
}
]
}
},
{
"name": "two"
},
{
"name": "three"
},
{
"name": "four",
"children": {
"items": [{
"name": "four sub a"
},
{
"name": "four sub b"
}]
}
},
{
"name": "five"
}]
};
});

最佳答案

事实证明,对于任何感兴趣的人来说,最好的方法是使用此处的 angular-recursion 助手:

https://github.com/marklagendijk/angular-recursion

这允许您递归调用 ng-repeat 函数。所以在你看来,是这样的:

<tree family="mytree"></tree>

然后定义一个指令,像这样调用自己:

.directive('tree', function(RecursionHelper) {
return {
restrict: "E",
scope: {family: '='},
template:
'{{ family.name }}'+
'<ul ng-if="family.children">' +
'<li ng-repeat="child in family.children">' +
'<tree family="child"></tree>' +
'</li>' +
'</ul>',
compile: function(element) {
return RecursionHelper.compile(element);
}
};
});

显然递归助手对于停止某种无限循环是必要的,正如所讨论的here .感谢@arturgrzesiak 提供链接!

关于javascript - 如何使用 Angular JS 递归迭代具有未知层次结构的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23371038/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com