关于四级联动(省市区街道) ---- 使用递归函数渲染树形element-plus

一般情况下后端返回的数据是三级联动或者是四级联动

在返回的数据中,一般children中有一个字段与父级中的一个是相等的,这个字段将会是我们在使用递归函数是传入的一个重要参数

模拟的返回的数据:

list: [{
      id: '',
      code: '',
      ame: '',
      parentCode: '',
      childrenList: [{
        id: '',
        code: '',
        ame: '',
        parentCode: '',   //一般parentCode为上级的code
        childrenList: [{
          id: '',
          code: '',
          ame: '',
          parentCode: '',
          childrenList: [{
            id: '',
            code: '',
            ame: '',
            parentCode: '',
          }]
        }]
      }]
    },]

下面是递归函数,你可以把它封装起来引入

//基本逻辑,我们需要传入一个总的列表,和一个判断的条件(id)
//遍历这个列表,选择满足条件  parentCode === code

//基本逻辑,我们需要传入一个总的列表,和一个判断的条件(id)
//遍历这个列表,选择满足条件  parentCode===code
export function listToTreeData(list, id) {
//准备一个空的数组以便我们返回数据
  const res = []
  list.forEach(el => {
    if (el.parentCode === code) {
      // 如果当前列表的 parentCode 等于标准 code 就是找到了一个上级
      // 这个上级可能有自己下一级
      //再次递归
      el.childrenList = listToTreeData(list, el.id)
      //把符合条件的数据push到我们事先准备好的 res 中
      res.push(el)
    }
  })
  return res
}

封装完毕我们引入使用,传入条件即可 

一般情况下返回的数据并不是我们想要的,这里我用的了 element-plus 的tree树形组件,我们可以用默认的属性来改造数据

其中  defaultProps  的  chiildren和label 就是你需要的

你可以自己来改造

<template>
  <el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick" />
</template>



const defaultProps = {
  children: 'childrenList',
  label: 'name',
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设后端返回的数据格式如下: ```json { "id": 1, "name": "Parent Node", "children": [ { "id": 2, "name": "Child Node 1", "children": [] }, { "id": 3, "name": "Child Node 2", "children": [ { "id": 4, "name": "Grandchild Node 1", "children": [] } ] } ] } ``` 可以先定义一个递归函数,将数据转化为 element-plus 树形表格所需的格式: ```javascript function transformData(data) { return data.map(item => { const { id, name, children } = item const node = { id, name, children: [] } if (children && children.length > 0) { node.children = transformData(children) } return node }) } ``` 然后在 Vue 组件中调用该函数,并将结果赋值给 treeData 属性: ```vue <template> <el-table-tree-column :props="treeProps" :data="treeData" border> <el-table-column label="ID" prop="id"></el-table-column> <el-table-column label="Name" prop="name"></el-table-column> </el-table-tree-column> </template> <script> export default { data() { return { treeData: [] } }, computed: { treeProps() { return { children: 'children', hasChildren: node => node.children && node.children.length > 0 } } }, methods: { fetchData() { // 发起 API 请求,获取数据 // 假设数据存储在 response.data 中 const response = await fetch('/api/tree') const data = await response.json() // 转化数据格式 this.treeData = transformData(data) } }, mounted() { this.fetchData() } } </script> ``` 注意:需要引入 `el-table-tree-column` 组件,并在 `treeProps` 中指定树形结构的属性名称。在上面的例子中,我们指定了 `children` 作为树形结构的属性。同时,在 `el-table-column` 组件中,需要指定展示的列。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值