vue 循环 递归组件_vue递归组件

本文介绍了如何在Vue中使用递归组件来创建树形结构。关键在于父组件传递数据时需要包含控制显示隐藏的字段,如`isShow`,并提供一个点击事件方法来切换显示状态。子组件通过判断`isShow`属性来决定是否渲染子菜单。在子组件中,利用`v-if`条件渲染和事件绑定实现递归效果。
摘要由CSDN通过智能技术生成

[TOC]

>[success] # vue递归组件

一般只有树形的结构的数据需要用到递归组件,也是头一次用,参考[案例网站](https://blog.csdn.net/zhaoxiang66/article/details/80940762),递归组件的显示隐藏需要后台在接口数据增加一个字段,来控制显示隐藏,或者前端自己手动在数据里面加一个的属性,值为布尔值,最好由后台来加这个字段因为前台加这个字段需要循环每一层树的数据在里面加一个属性

>[success]### 父级组件写法

使用时候只需要传入2个自定义属性一个folder,渲染的数据列表,一个select自定义属性里面传递一个自定义方法,用来控制树节点的点击事件

**src/views/parent.vue**

~~~

// html部分

// js部分

import bimTree from '@/component/bimTree/bimTree' // 引入子组件

export default {

components:{

bimTree

},

data(){

return{

componentInfo: { // 列表数据

structureInfo: [{

"id": 2,

"code": "1.1",

"parentCode": "1",

"nodeType": "StructureType",

"name": "上部结构",

"level": 1,

"hasChild": true,

"isDeck": false,

"isShow": false,

"subList": [{

"id": 5,

"code": "1.1.1",

"parentCode": "1.1",

"nodeType": "UnitCode",

"name": "上部承重构件",

"level": 2,

"hasChild": true,

"isDeck": false,

"isShow": false,

"subList": [{

"id": 21,

"code": "1.1.1.1",

"parentCode": "1.1.1",

"nodeType": "SubUnitCode",

"name": "主梁",

"level": 3,

"hasChild": false,

"isDeck": false,

"isShow": false

}]

}, {

"id": 6,

"code": "1.1.2",

"parentCode": "1.1",

"nodeType": "UnitCode",

"name": "上部一般构件",

"level": 2,

"hasChild": true,

"isDeck": false,

"isShow": false,

"subList": [{

"id": 23,

"code": "1.1.2.1",

"parentCode": "1.1.2",

"nodeType": "SubUnitCode",

"name": "横隔板",

"level": 3,

"hasChild": false,

"isDeck": false,

"isShow": false

}]

}, {

"id": 7,

"code": "1.1.3",

"parentCode": "1.1",

"nodeType": "UnitCode",

"name": "支座",

"level": 2,

"hasChild": true,

"isDeck": false,

"isShow": false,

"subList": [{

"id": 25,

"code": "1.1.3.1",

"parentCode": "1.1.3",

"nodeType": "SubUnitCode",

"name": "橡胶支座",

"level": 3,

"hasChild": false,

"isDeck": false,

"isShow": false

}]

}]

}]

}

}

}

},

methods:{

select(data){ // 点击树节点时候显示隐藏对应的节点

// isShow为接口字段返回的布尔值

data.isShow = !data.isShow

}

}

~~~

>[success]### 子级组件写法

子组件需要把树形的样式写出来,然后来循环,这里需要注意到`li里面的 bimTree `实际上就是在根据item里面是否有isShow(正常应该用child这样的一个列表判断)来控制是否继续渲染子菜单,一直到isShow为false为止,还有一点需要注意在span元素上需要绑定父组件传过来的事件,把item传过去即可这样每次点击对应的节点时候就能取到对应的item节点数据

**@/component/bimTree/bimTree**

~~~

// html部分

  • {{item.name}}

// js部分

export default {

name:'bimTree',

components:{

[Icon.name]:Icon

},

props:['folder','select']

}

~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值