vue3递归组件

效果:

1.父组件:
<template>
  <tree :msg="data"></tree>
</template>

<script setup lang="ts">
import { reactive } from 'vue'
import tree from '../src/components/Tree.vue'
interface Tree {
  value: string,
  checked:boolean,
  children?:Tree[]
}
const data = reactive<Tree[]>([{
  value: '1111',
  checked: false,
  children: [
    {
      value: '11-11',
      checked: false
    },
    {
      value: '11-22',
      checked: true,
      children: [
        {
          value: '11-22-11',
          checked: false
        },
        {
          value: '11-22-22',
          checked: false
        },
      ]
    },
  ]
}, {
  value: "2222",
  checked: true,
  children: [
    {
      value: '22-11',
      checked: false
    },
    {
      value: '22-22',
      checked: false,
      children: [
        {
          value: '22-22-11',
          checked: false
        },
        {
          value: '22-22-2',
          checked: false
        },
      ]
    },
  ]
},
])
</script>
2.子组件

递归使用的组件名称必须与组件文件名称一致,子组件名为Tree.vue,则使用<Tree></Tree>

<template>
<div class="tree" v-for="item in msg">
    <input type="checkbox" :checked="item.checked"> {{item.value}}
    <Tree v-if="item.children?.length" :msg="item?.children"></Tree>
</div>
</template>
<script setup lang="ts">
// import {ref} from 'vue'
interface Tree {
  value: string,
  checked:boolean,
  children?:Tree[]
}
defineProps<{
    msg?:Tree[]
}>()
</script>
<style scoped>
.tree{
    margin-left: 40px;
    text-align: left;
}
</style>
3.自定义组件名称

3.1自定义name

<test v-if="item.children?.length" :msg="item?.children"></test>
<script lang="ts">
export default{
    name:"test"
}
</script>

3.2安装插件

unplugin-vue-define-options 或其他

  • 30
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值