vue动态组件之:is在组件中的使用场景

 更新时间:2023年07月07日 10:54:01   作者:seekHelp  
这篇文章主要介绍了vue动态组件之:is在组件中的使用场景,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

vue动态组件之:is在组件中的使用

使用场景:

有些场景会需要在两个组件间来回切换,比如 Tab 界面:
我们可以通过 Vue 的<component> 元素和特殊的 is attribute 实现的:如

<!-- currentTab 改变时组件也改变 -->
<component :is="currentTab"></component>

在上面的例子中,被传给:is的值可以是以下几种:

  • 被注册的组件名
  • 导入的组件对象
    你也可以使用 isattribute 来创建一般的 HTML 元素。

当使用 <component :is="...">来在多个组件间作切换时,被切换掉的组件会被卸载。我们可以通过 <KeepAlive> 组件强制被切换掉的组件仍然保持“存活”的状态。

vue3中的:is 动态组件

1、注意事项

1、在Vue2 的时候is是通过组件名称切换的,在Vue3 setup是通过组件实例切换的

2、如果直接把组件实例放到reactive中代理,vue会发出警告。告知我们可以通过shallowRef 或者 markRaw 跳过proxy 代理。因为组件实例进行响应式代理毫无意义,且浪费性能

在这里插入图片描述

2、:is 动态组件使用

子组件通过defineProps接受传参

<template>
  <div class="content">
    <div class="tabs" v-for="item in tabArr" :key="item.name" @click="tabChange(item.comName)">
      {{ item.name }}
    </div>
  </div>
  <component :is="currentCom"></component>
</template>
<script setup lang="ts">
  import { ref, reactive, markRaw } from 'vue'
  import A from './A.vue'
  import B from './B.vue'
  import C from './C.vue'
  type Tab = {
    name: string,
    comName: any
  }
  // 从复杂数据类型中取出自己想要的几个属性
  type Com = Pick<Tab, 'comName'>
  const tabArr = reactive<Tab[]>([
    {
      name: 'A组件',
      comName: markRaw(A)
    },
    {
      name: 'B组件',
      comName: markRaw(B)
    },
    {
      name: 'C组件',
      comName: markRaw(C)
    },
  ])
  const currentCom = ref<Com>(tabArr[0].comName)
  const tabChange = (item: Com) => {
    currentCom.value = item
  }
</script>
<style>
  .content {
    display: flex;
    padding: 20px;
    height: 40px;
    width: 100vw;
    background: #f1f1f1;
  }
  .tabs {
    width: 100px;
    height: 40px;
    background: #ffffff;
    margin-right: 5px;
    border: 1px solid #000;
  }
</style>

到此这篇关于vue - 动态组件(:is在组件中的使用)的文章就介绍到这了,更多相关vue动态组件:is内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用kbone解决Vue项目同时支持小程序问题

    使用kbone解决Vue项目同时支持小程序问题

    这篇文章主要介绍了使用kbone解决Vue项目同时支持小程序问题,本文通过一个todo的例子跟大家详细介绍,需要的朋友可以参考下
    2019-11-11
  • Vite vue3多页面入口打包以及部署踩坑实战

    Vite vue3多页面入口打包以及部署踩坑实战

    因为我们公司的项目是多页面应用,不同于传统单页面应用,一个包就可以了,下面这篇文章主要给大家介绍了关于Vite vue3多页面入口打包以及部署踩坑的相关资料,需要的朋友可以参考下
    2022-05-05
  • nginx+vue.js实现前后端分离的示例代码

    nginx+vue.js实现前后端分离的示例代码

    这篇文章主要介绍了nginx+vue.js实现前后端分离的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • vue改变数据后数据变化页面不刷新的解决方法

    vue改变数据后数据变化页面不刷新的解决方法

    这篇文章主要给大家介绍了关于vue改变数据后数据变化页面不刷新的解决方法,vue比较常见的坑就是数据(后台返回)更新了,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • vue中的使用token的方法示例

    vue中的使用token的方法示例

    这篇文章主要介绍了vue中的使用token的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Vue中使用highlight.js实现代码高亮显示以及点击复制

    Vue中使用highlight.js实现代码高亮显示以及点击复制

    本文主要介绍了Vue中使用highlight.js实现代码高亮显示以及点击复制,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • vue3实现鼠标右键显示菜单,点击其他地方消失问题

    vue3实现鼠标右键显示菜单,点击其他地方消失问题

    这篇文章主要介绍了vue3实现鼠标右键显示菜单,点击其他地方消失问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • webpack+vue-cil 中proxyTable配置接口地址代理操作

    webpack+vue-cil 中proxyTable配置接口地址代理操作

    这篇文章主要介绍了webpack+vue-cil 中proxyTable配置接口地址代理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • 前端Vue2、Vue3和不同版本nuxt的插槽使用详解

    前端Vue2、Vue3和不同版本nuxt的插槽使用详解

    这篇文章主要介绍了前端Vue2、Vue3和不同版本nuxt的插槽使用的相关资料,Vue2和Vue3中,插槽机制允许在组件模板中定义占位符,并在使用组件时插入自定义内容,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-02-02
  • vue3 setup点击跳转页面的实现示例

    vue3 setup点击跳转页面的实现示例

    本文主要介绍了vue3 setup点击跳转页面的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-10-10

最新评论