在我的角应用程序中,我使用AngularTree指令(http://wix.github.io/angular-tree-control)呈现以下数据结构的树视图:
$scope.subjectAreas = [
{
name: "Area-1",
link: "dashboards.dashboard_1",
entities: [
{
name: "entity 1"
},
{
name: "entity 2"
}
]
},
{
name: "Area-2",
link: "dashboards.dashboard_1",
entities: [
{
name: "entity 3"
}
]
},
{
name: "Area-3",
link: "dashboards.dashboard_1",
entities: [
{
name: "entity 4"
},
{
name: "entity 5"
},
{
name: "entity 6"
}
]
}
];这个treeView指令提供了"createSubTree“函数,我正在使用它,如下所示:
function createSubTree(level, width, prefix) {
if (level > 0) {
var res = [];
for (var i=1; i <= width; i++)
res.push({ "label" : getName(i), "id" : "id"+prefix + i, "i": i,
"children": createSubTree(level-1, setNumberOfChildren(getName(i),i), prefix + i +".")});
return res;
}
else
return [];
}以下是我的辅助功能:
function countNumberOfEntities(index){
return $scope.subjectAreas[index].entities.length;
}
function getSubjectAreasLength(){
return $scope.subjectAreas.length;
}
function setNumberOfChildren(subjectArea, index){
var numberOfChildEntities = countNumberOfEntities(index-1);
return numberOfChildEntities;
}
function getName(index){
if($scope.subjectAreas[index-1]){
var subjectAreaName = $scope.subjectAreas[index-1].name;
var n = subjectAreaName;
return subjectAreaName;
}
}树视图呈现得很好,但所有子对象(属于给定SubjectArea的实体名称)最终都具有与其父级(SubjectArea)相同的名称。
当前呈现如下所示:
Area-1
Area-1
Area-2
Area-2
Area-1
Area-3
Area-1
Area-2
Area-3这需要看上去是:
Area-1
Entity-1
Entity-2
Area-2
Entity-3
Area-3
Entity-4
Entity-5
Entity-6如何修改这个"createSubTree“函数以返回每个实体的名称,当它在这里被递归调用时:"children": createSubTree(level-1, setNumberOfChildren(getName(i),i), prefix + i +".")});
发布于 2016-03-17 18:57:08
将代码更改为:
function createSubTree(ary) {
var res = [];
if (ary) {
res = ary.map(function(v, k) {
var id = k + 1;
return {
i: id,
id: 'id' + id,
label: v.name,
children: createSubTree(v.entities)
}
});
}
return res;
}
$scope.treedata = createSubTree($scope.subjectAreas);尽量避免在递归方法中发送索引等。有时,您不得不发送索引,但在本例中,您可以发送主数组,并对每个元素的子数组递归地调用相同的运行。
https://stackoverflow.com/questions/36065847
复制相似问题