【发布时间】:2020-01-31 03:10:47
【问题描述】:
我正在尝试实现一个层次结构树,其中我有一个用户列表,我为每个用户设置了一个“高级”,因此它定义了高级用户是谁。这就是我试图解决问题的方式:
这就是我正在做的:
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>
【问题讨论】:
-
@TahaPaksu 不!谢谢,我马上去看看。
-
我不确定我是否理解您为什么需要递归组件,
.filter将返回一个数组,其中 all 为给定的初中生seniors,除非我是没有正确理解您的数据。 (与.find不同,它只返回 one 值并且not 数组(第一个值)) -
Ciao @Michael,我正在过滤
senior_id字段。我有一个下拉列表,在用户“Bill Simons”上,我选择他的前辈为“Joe”,所以 Bill 现在将拥有senior_id:1。该循环仅显示拥有senior_id:1以显示“他的腿”的用户。有意义吗?
标签: javascript vue.js vuejs2