Vue3第八章(动态组件)

动态组件
在components下注册A,B,C组件,在index.vue中引用,然后通过点击切换组件

//A组件
<template>
  <div>
    AAAAAAAAAAAAAAAAAA
  </div>
</template>
//B组件
<template>
  <div>
    BBBBBBBBBBBBBBBBB
  </div>
</template>
//C组件
<template>
  <div>
    CCCCCCCCCCCCCCCC
  </div>
</template>

index.vue

<template>
  <div class="content">
    <div class="tabs">
      <div @click="changeCom(item)" class="tabs-items" :key="item.name" v-for="item in data">{{item.name}}</div>
    </div>
    <div>
      <component :is="curName"></component>
   </div>
  </div>

</template>

<script setup lang="ts">
import {reactive,ref,markRaw} from 'vue'
import A from './A.vue'
import B from './B.vue'
import C from './C.vue'

type Com = {
  name: string,
  comName: any
}
type ComName = Pick<Com,'comName'>
const data = reactive<Com[]>([
  {
    name: '我是A组件',
    comName: markRaw(A)
  },
  {
    name: '我是B组件',
    comName: markRaw(B)
  },
  {
    name: '我是C组件',
    comName: markRaw(C)
  }
])

let curName = ref<ComName>(data[0].comName)

const changeCom = (item:Com) => {
  curName.value = item.comName
}
</script>

<style lang="less" scoped>
.tabs{
  display: flex;
  &-items{
    border: 1px solid black;
    margin-right: 20px;
  }
}
</style>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值