首页 > 其他分享 >Vue实现动态组件

Vue实现动态组件

时间:2024-06-04 12:33:46浏览次数:15  
标签:compB Vue return default compA 组件 动态 data

使用场景:同一个区域因状态不同或者tab页,展示给用户不同模版样式逻辑的组件

动态组件实现,是通过使用 is attribute 来切换不同的组件

<component v-bind:is="currentTabComponent"></component>

 一、公共动态组件父组件(可以通过keep-alive缓存)

<!-- 公共动态组件 isComponent.vue -->
<template>
  <div>
    <el-button :class="currentClass(item)" v-for="item in Object.keys(Dict)" :key="item" @click="changeBtn(item)">
      {{ item }}
    </el-button>
    <div>
      <keep-alive>
        <!-- 根据component搭配is内容进行动态切换显示内容 -->
        <component :is="currentTabComponent" :data="data" ref="comp"></component>
      </keep-alive>
    </div>
  </div>
</template>

<script>
// 引入动态显示的组件
import compA from './components/dynamicComponents/compA.vue'
import compB from './components/dynamicComponents/compB.vue'

export default {
  name: "myTabsName",
  components: { compA, compB },
  data() {
    return {
      currentTabComponent: 'compA',
      data: '西游记',
      // 自定义字典
      Dict: {
        '西游记': 'compA',
        '水浒传': 'compB',
      }
    };
  },
  computed: {
    // 通过计算属性添加class类
    currentClass() {
      return (item) => {
        if (this.currentTabComponent === this.Dict[item]) { return 'active' }
      }
    }
  },
  methods: {
    // 切换tab事件
    changeBtn(val) {
      this.currentTabComponent = this.Dict[val]
      this.data = val
    }
  },
};
</script>

<style lang="scss" scoped>
.active {
  background-color: red;
  color: white;
}
</style>

 二、1.公共动态组件子组件A

<!-- 公共动态子组件 compA.vue -->
<template>
  <div class="aa">
    {{ data }}
    <br>
    <el-input class="inp" v-model="formA"></el-input>
  </div>
</template>

<script>
export default {
  name: "compA",
  props: {
    data: {
      type: String,
      default: ''
    }
  },
  data() {
    return {
      formA: ''
    }
  }
};
</script>
<style>
.aa {
  background-color: rgb(250, 203, 211);
  margin: 10px auto;
  width: 500px;
  height: 300px;
}

.inp {
  width: 100px;
}
</style>

  二、2.公共动态组件子组件B

<!-- 公共动态子组件 compB.vue -->
<template>
  <div class="bb">
    {{ data }}
  </div>
</template>

<script>
export default {
  name: "compB",
  props: {
    data: {
      type: String,
      default: ''
    }
  },
};
</script>

<style>
.bb {
  background-color: rgb(181, 200, 244);
  margin: 10px auto;
  width: 500px;
  height: 300px;
}
</style>

做个记录,如有不足,欢迎补充。

 不要忽视你达成的每个小目标,它是你前进路上的垫脚石。冲!

标签:compB,Vue,return,default,compA,组件,动态,data
From: https://blog.csdn.net/stella_stella123/article/details/139316396

相关文章

  • 【WAF】雷池的动态防护深度体验
    1.前言随着网络安全的不断发展,我们看到了越来越多的技术和策略应用于保护个人和组织的数据免受恶意攻击和侵入。从传统的防火墙和反病毒软件到先进的人工智能和机器学习算法,网络安全领域正在不断创新和进步。未来,我们可以期待更多基于数据分析和预测的安全解决方案,以及对人工......
  • 雷池WAF-动态防护新功能体验
    雷池WAF雷池WAF(WebApplicationFirewall,网络应用防火墙)是由长亭科技开发的一个网络安全产品,它专注于保护Web应用免受黑客攻击。今天主要讲的是长亭雷池最近新出的功能:动态防护安装雷池WAF支持多种安装方式:sh脚本安装、离线安装、牧云助手安装本篇文章以牧云助手为例:(需要您......
  • Vue3-组件通信详解
    文章目录组件通信的含义Vue3组件通信和Vue2的区别组件通信的具体实现props(父子组件通信)自定义事件(子传父)mitt(任意组件间通信)v-model$attrs(非props的父子组件通信)r......
  • OpenCloudOS Kernel SIG 月度动态:发布 OCK 6.6.30-4 版本,新增特性支持
    作为OpenCloudOS核心SIG之一,KernelSIG负责OpenCloudOS内核的路线规划、方案讨论、技术能力输出,为OpenCloudOS提供更加稳定、可靠的内核基座。一、整体进展1、发布OCK6.6.30-4版本,合入Intel、龙芯、Phytium、兆芯等特性支持;2、OpenCloudOSKernel文档内容更新,实......
  • vue2.0和vue3.0同时使用
    背景:原先电脑上安装了vue2.0和node14.17.6版本,后面新项目使用的是vue3.0和node 16.6.1。通过nvm安装node 16.6.1的时候,不小心把原来的2.0环境给搞坏了。目的:本文将通过文字描述(都是cmd命令,截图感觉没啥意义)的方式,讲述卸载和安装多版本node的vue环境前言:步骤中所有的命令都......
  • JavaFX 常见布局组件的使用
    Laytout简介JavaFX提供了多种布局管理器(LayoutManagers),它们用于自动管理用户界面组件的位置和大小。布局管理器可以简化UI设计,因为它们会根据窗口的大小变化自动调整其中的组件。布局组件JavaFX包含以下布局组件:布局名称中文说明AnchorPane锚点布局允许开发......
  • 《计算机网络微课堂》实验25 动态主机配置协议DHCP的作用
    下面我们来进行一个仿真实验,本仿真实验的目的在于验证动态主机配置协议DHCP的作用。我已经在软件中构建好了我们理论课中所使用的那个例子,并在各设备旁边标注出了所需的配置信息,我们的应用需求是不给局域网中的各主机手动配置IP地址,子网掩码、默认网关、DNS服务器等信息,而是......
  • pinia之Vue 的存储库,案例:允许跨组件/页面共享状态--传值
    pinia之Vue的存储库,案例:允许跨组件/页面共享状态--传值第⼀步:npminstallpinia第⼆步:操作src/main.tsimport{createApp}from'vue'importAppfrom'./App.vue'/*引⼊createPinia,⽤于创建pinia*/import{createPinia}from'pinia'/*创建pinia*/con......
  • Django + Vue 使用Nginx + uWsgi部署
    1.settings.py配置STATIC_ROOT=os.path.join(BASE_DIR,'static/dist')#导入前后端静态资源后更改即可DEBUG=True#为True不容易暴露项目信息,当然也不显示BUG信息ALLOWED_HOSTS=['*']STATIC_URL='/static/' 2.django端打包静态资源#会在static下生成[root@dsc1m......
  • 界面控件DevExpress WinForms的流程图组件 - 可完美复制Visio功能(二)
    DevExpressWinForms的Diagram(流程图)组件允许您复制MicrosoftVisio中的许多功能,并能在下一个WindowsForms项目中引入信息丰富的图表、流程图和组织图。P.S:DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美......