我正在尝试创建一个层级树,其中我有一个用户列表,对于每个用户,我都设置了一个“高级”,以定义谁是高级。这是我尝试解决问题的方式:
这是我正在做的事情:
data(){
return{
users: [{
id: 1,
fname: 'Joe',
lname: 'Smith',
title: 'Super-Senior',
senior_id: 0,
}, {
id: 2,
fname: 'Bill',
lname: 'Simons',
title: 'Junior-1',
senior_id: 0,
}];
}
},
methods: {
juniors(senior) {
return this.users.filter((user) =>
user.senior_id == senior.id
);
}
}
然后是组件树:
<ul>
<li v-for="chief in juniors(snr_chief)">
<div class="child mx-1">{{chief.lname}} {{chief.fname}}<br /> <small>{{chief.title}}</small>
</div>
<ul>
<li v-for="second in juniors(chief)">
<div class="child mx-1">{{second.lname}} {{second.fname}}<br /> <small>{{second.title}}</small>
</div>
<ul>
<li v-for="third in juniors(second)">
<div class="child mx-1">{{third.lname}} {{third.fname}}<br /> <small>{{third.title}}</small>
</div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
这很完美,但仅限于3级。我实际上不知道用户可能会深入多少级。
因此,想法是拥有一个递归组件,但我不知道如何实现。类似以下内容:
<ul>
<li v-for="chief in juniors(snr_chief)">
<div class="child mx-1">{{chief.lname}} {{chief.fname}}<br /> <small>{{chief.title}}</small>
</div>
<Repeater :juniors="snr_chief" :self="chief" />
</li>
</ul>
.filter
将返回一个包含给定初级的所有seniors
的数组,除非我没有正确理解你的数据。(与.find
相反,它只返回一个值而不是一个数组(第一个值)) - Michaelsenior_id
字段进行筛选。我有一个下拉菜单,在用户“Bill Simons”上,我选择他的上级为“Joe”,因此Bill现在将拥有senior_id:1
。循环只显示那些具有senior_id:1
的用户来展示“他的腿”。这有意义吗? - Mr.Web