首页 > 其他分享 >vue3 组件的动态渲染 <component :is=“componentTag“ />

vue3 组件的动态渲染 <component :is=“componentTag“ />

时间:2024-05-29 15:03:22浏览次数:23  
标签:vue component childC vue3 组件 import componentTag ref

1、动态渲染组件

        <component :is=""></component>

        通过isShow来切换显示A、B组件

首先创建父组件.vue文件和两个子组件A、B文件,并引入。

template:

<div>
    <h3>我是父组件dynamicComp.vue</h3>
    <button @click="isShow = !isShow">切换组件</button>
    <!-- isShow为true时显示childA组件,否则显示childB组件 -->
    <component :is="isShow ? childA : childB"></component>
</div>

js:

import { ref, reactive, shallowRef } from 'vue'
import childA from './component/childA.vue'
import childB from './component/childB.vue'

const isShow = ref(true)

效果:

点击切换按钮,就会切换显示A、B组件。

2、整理要渲染的组件 --案例

        通过整理组件名到一个变量,再用:is渲染 

        不引入shallowRef跳过proxy代理的话会报警告

2.1 新建C、D、E子组件:

~childC:

<template>
    <div>
      <h3>我是组件childC</h3>
      <img src="@/assets/images/pig.jpg" alt="">
    </div>
  </template>
  <script setup>
  import { ref, reactive } from 'vue'
  
  </script>
  <style scoped>
  img {
    width: 50px;
    height: 50px;
  }
  </style>

~childD:

<template>
    <div>
      <h3>我是组件childD</h3>
      <ul>
        <li>电影</li>
        <li>体育</li>
        <li>图书</li>
        <li>电竞</li>
        <li>编程</li>
      </ul>
    </div>
  </template>
  <script setup>
  import { ref, reactive } from 'vue'
  
  </script>
  <style scoped>
  
  </style>

 ~childE:

<template>
    <div>
      <h3>我是组件childE</h3>
      <input type="text" placeholder="请输入...">
    </div>
  </template>
  <script setup>
  import { ref, reactive } from 'vue'
  
  </script>
  <style scoped>
  
  </style>

父组件:

html:

<div>######################整理要渲染的组件 --案例 start ################</div>
<div>
    <button @click="handleChangeTag('C')">组件C</button>
    <button @click="handleChangeTag('D')">组件D</button>
    <button @click="handleChangeTag('E')">组件E</button>
    <component :is="componentTag"></component>
</div>
<div>######################整理要渲染的组件 --案例 end ################</div>

js:

import { ref, reactive, shallowRef } from 'vue'
import childA from './component/childA.vue'
import childB from './component/childB.vue'
import childC from './component/childC.vue'
import childD from './component/childD.vue'
import childE from './component/childE.vue'

/**
 * 2、整理要渲染的组件 --案例
 * 通过整理组件名到一个变量,再用:is渲染
 * 不引入shallowRef跳过proxy代理的话会报警告
 */
const componentTag = shallowRef(childC)
// const componentTag = ref(childC) //如果用ref,此处被警告节省性能开销
const handleChangeTag = (idx) => {
  componentTag.value = (idx === 'C') ? childC : (idx === 'D' ? childD : childE)
}

效果:

默认显示childC组件,点击切换就显示对应组件。

 

标签:vue,component,childC,vue3,组件,import,componentTag,ref
From: https://blog.csdn.net/weixin_48420104/article/details/139295051

相关文章

  • vue3 表单输入绑定
    表单输入绑定在前端处理表单时,我们常常需要将表单输入框的内容同步给JavaScript中相应的变量。手动连接值绑定和更改事件监听器可能会很麻烦:<input:value="text"@input="event=>text=event.target.value">v-model指令帮我们简化了这一步骤:<inputv-model=......
  • vue3响应式基础
    声明响应式状态​ref()​在组合式API中,推荐使用ref()函数来声明响应式状态:import{ref}from"vue";constmsg=ref("helloworld");ref()接收参数,并将其包裹在一个带有.value属性的ref对象中返回:<template><div>{{msg}}</div></template><scri......
  • 解决Vue3项目使用多个根标签提示[vue/no-multiple-template-root]The template root r
    报错截图检查原因第一步:检查是否安装了 Vetur 插件 第二步:左下角设置图标 ==》设置第三步:进入设置页面搜索eslint把Vetur的验证模板,取消勾选 Validatevue-htmlinusingeslint-plugin-vue第四步:将错误提示页面关掉然后重新打开,即可正常显示......
  • vue3项目中 路由elementPlus当中的标签页结合封装
    在项目当中大家应该都有看到过,像标签页一样的面包屑吧,接下来我为大家介绍一下,主要组成部分:路由+组件库的标签页。ok就这么easy!!!它实现的方法也不难哦请看效果图ok,在中间实现思路与大家分享一下:主要是使用watch监听我们的route路由的变化,然后根据传递过来的路由信息,进行标签页......
  • Vue从入门到实战Day12~14 - Vue3大事件管理系统
    一、用到的知识Vue3compositionAPIPinia/Pinia持久化处理ElementPlus(表单校验,表格处理,组件封装)pnpm包管理升级Eslint+prettier更规范的配置husky(Githooks工具):代码提交之前,进行校验请求模块设计VueRouter4路由设计AI大模型开发一整个项目模块(掌握最新的开发方式)·......
  • Vue3 实现登录跳转页面
    点击登录按钮即跳转到新页面,而不是在当前页面加载组件App.Vue:<script>exportdefault{data(){return{}}}</script><template>//必须加上router-view,否则会显示空白页面<router-view></router-view></template><style></style>main......
  • Vue2和Vue3获取组件名称
    Vue获取组件名称Vue2获取组件名称获取方式:this.$options.name解读:通过Vue2的this关键字,可以很容易地访问Vue组件实例对象身上的$options的name属性来获取组件名称。<script>exportdefault{name:"Brand",mounted(){//Brandconsole.log(this.......
  • VUE3操作系统之【文件管理】
    回顾VUE3开发操作系统日志【窗口拖拽,碰撞检测,附带代码】-CSDN博客概要作为一个操作系统,文件管理当然是必不可少的存在这可不是静态作秀的页面,是真实的文件增删改查本期会分享一些上传的技术细节在线预览:AX先看长啥样技术选型前端:Vue3+Antui+Splitpanes后端:JavaJ......
  • 升鲜宝供应链管理系统重构版发布(技术点:Java8、mysql8.0 uniapp、vue、android、web 框
    升鲜宝供应链管理系统重构版发布(技术点:Java8、mysql8.0uniapp、vue、android、web框架:Vue3+SpringBoot3),界面功能(二)    客户订货---订货模板      客户订货模板      ......
  • vue3 动态组件
    <template><divclass="max_box"><a-tabsv-model:activeKey="activeKey"@change="callback"><a-tab-pane:tab="item.tab"v-for="iteminstate.list":key="i......