vue3全局和局部组件 和递归组件 setup

全局组件 (在main.ts)
在这里插入图片描述

import { createApp } from 'vue'
import './style.css'
import  card from './components/card/index.vue'
import ceshi from './components/ceshi/index.vue';

import App from './App.vue'

createApp(App).component('card',card).component('ceshi',ceshi).mount('#app')

使用:
在这里插入图片描述
局部组件直接导入 标签直接使用
在这里插入图片描述

递归组件(就是在当前的文件下调用当前的文件进行绑定标签)
父组件

<template>
    <div>
        <tree :data="data"  @onckickmenu="onckickmenu"></tree>
    </div>
</template>

<script setup lang="ts">
import  {reactive}  from 'vue'
import  tree  from '../../components/Tree/index.vue'
    type TreeList={
        name:string,
        icon?:string,
        children?:TreeList[] |[]
    }
    const  data=reactive<TreeList[]>([
        {name:'no.1',
         children:[
             {
              name:'no.1-1',
              children:[
                 {
                   naame:'no.1-1-1',
                }
        
             ]
             } 
        ]
        
        },
        {
            name:'no.2',
            children:[
                {name:'no.2-1'}
            ]
        },
         {
            name:'no.3',
              children:[
                {name:'no.3-1'},
                {name:'no.3-2'},
            ]
        }
    ])

    const  onckickmenu=(value:TreeList)=>{
        console.log(value)
    }
</script>

<style scoped  >
</style>

Tree.vue 子组件

<template>
    <div>
         <div class="" @click.stop="clickitem(item)" style="margin-left:10px"
          v-for="(item,index)  in data" :key="index">
             {{item.name}}
             <!-- item?.children?.length  没有返回undefined  item.children.length  没有会报错 -->
             <TreeItem  @onckickmenu="clickitem" :data="item.children"
               v-if="item?.children?.length"></TreeItem>
         </div>
    </div>
</template>

<script setup lang="ts">
import {reactive, defineProps, defineEmits} from 'vue';
import  TreeItem from './index.vue';//引用自己的组件
const  emit= defineEmits(['onckickmenu']) 
  type TreeList={
        name:string,
        icon?:string,
        children?:TreeList[] |[]  //children里面还可能是该内容
    }
 type Props={
     data:TreeList[]
 }
 defineProps<Props>();
const  clickitem=(value:TreeList)=>{
    emit('onckickmenu',value)
}
</script>
<script   lang="ts">
export  default{
    name:'TreeList'
}
</script>


<style scoped>

</style>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值