在用vue来做项目的时候,遇到了一个情况。就是当你不确定返回数据的层级是多少是,但是你又需要把底下的数据全都遍历出来。这时候直接用v-for来循环是无法循环出来的。那该怎么办呢?
举个栗子
比如有一个这样的数据结构,然后我们需要把这个每个对象的name都遍历出来而且呈现树形结构的形式。但是不确定到底有多少层。
1 | [{ |
解决办法
思路就是创建一个自定义的组件。然后让这个组件递归调用自己,从而的达到效果。
事不宜迟,就来试试吧。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<template>
<div v-for="item in list" >
<div>{{item.name}}</div>
<!-- 调用自身组件 -->
<Bean :list="item.child"></Bean>
</div>
</template>
<script>
export default{
name:'Bean',
props:{
list:{
default:[]
}
}
}
</script>
父级调用:
1 | <template> |
就是这么简单。如果是要加上一些点击之后返回数据name给父级的话,要注意的问题是要把绑定的方法继续传递给下个组件。不然下个组件就获取不到父级定义的方法。
实例
下面是我编写的一个实例:
这个例子比较复杂。就是写了一个部门组件,同时用于新增员工的时候选择部门所用。也用于在系统中选择某个部门的员工的功能所用。
该例子的数据结构是,同样是不确定部门的层级,而且每个层级都可以添加员工。
1 | [{ |
下面是实现代码:
1 | <template> |