Vuejs:component动态组件的使用示例

简介: Vuejs:component动态组件的使用示例

image.png

文档

component动态组件很适合在不同组件之间切换,相比v-if判断,要优雅得多

项目结构

$ tree -I node_modules
.
├── package.json
└── src
    ├── App.vue
    ├── components
    │   ├── ComponentA.vue
    │   ├── ComponentB.vue
    │   └── ComponentC.vue
    └── main.js

依赖 package.json

{
  "scripts": {
    "dev": "vue-cli-service serve",
    "build": "vue-cli-service build"
  },
  "dependencies": {
    "vue": "^2.6.14"
  },
  "devDependencies": {
    "@vue/cli-service": "^5.0.8",
    "vue-template-compiler": "^2.6.14",
    "less": "^4.0.0",
    "less-loader": "^8.0.0"
  }
}

入口文件 main.js

import Vue from "vue";
import App from "./App.vue";
new Vue({
  el: "#app",
  render: (h) => h(App),
});

组件 ComponentA.vue

<template>
  <div class="">ComponentA</div>
</template>
<script>
// created at 2023-03-31
export default {
  name: "ComponentA",
};
</script>
<style lang="less"></style>

组件 ComponentB.vue

<template>
  <div class="">ComponentA</div>
</template>
<script>
// created at 2023-03-31
export default {
  name: "ComponentA",
};
</script>
<style lang="less"></style>

组件 ComponentC.vue

<template>
  <div class="">ComponentC</div>
</template>
<script>
// created at 2023-03-31
export default {
  name: "ComponentC",
};
</script>
<style lang="less"></style>

App.vue

<template>
  <div class="app-container">
    <h2>Vue.js component动态组件示例</h2>
    <!-- tabs -->
    <div class="tabs">
      <div
        v-for="item in componentConfigs"
        class="tab-item"
        :class="{ 'tab-item--active': item.value == tab }"
        @click="handleTabClick(item)"
      >
        {{ item.label }}
      </div>
    </div>
    <!-- content -->
    <div class="content">
      <component v-bind:is="currentComponent"></component>
    </div>
  </div>
</template>
<script>
// created at 2022-12-26
import ComponentA from "./components/ComponentA.vue";
import ComponentB from "./components/ComponentB.vue";
import ComponentC from "./components/ComponentC.vue";
const componentConfigs = [
  {
    component: ComponentA,
    value: "A",
    label: "组件 A",
  },
  {
    component: ComponentB,
    value: "B",
    label: "组件 B",
  },
  {
    component: ComponentC,
    value: "C",
    label: "组件 C",
  },
];
export default {
  name: "App",
  data() {
    return {
      tab: "A",
      componentConfigs,
    };
  },
  computed: {
    currentComponent() {
      return componentConfigs.find((item) => item.value == this.tab).component;
    },
  },
  methods: {
    handleTabClick(item) {
      this.tab = item.value;
    },
  },
  created() {},
};
</script>
<style lang="less">
body {
  display: flex;
  justify-content: center;
}
.app-container {
  text-align: center;
}
.tabs {
  display: flex;
  justify-content: center;
  border: 1px solid #808080;
  border-bottom: none;
}
.tab-item {
  width: 200px;
  line-height: 40px;
  text-align: center;
  background-color: #808080;
  color: #fff;
  cursor: pointer;
}
.tab-item--active {
  background-color: #fff;
  color: #000;
}
.content {
  line-height: 500px;
  text-align: center;
  border: 1px solid #808080;
}
</style>

完整代码:https://github.com/mouday/vue-demo/tree/main/packages/vue-component

在线示例:https://mouday.github.io/vue-demo/packages/vue-component/dist/index.html


相关文章
|
3月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
319 2
|
6月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
806 0
|
8月前
|
JavaScript
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
1037 4
|
6月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
6月前
|
JavaScript 前端开发 UED
Vue 表情包输入组件的实现代码:支持自定义表情库、快捷键发送和输入框联动的聊天表情解决方案
本文详细介绍了在 Vue 项目中实现一个功能完善、交互友好的表情包输入组件的方法,并提供了具体的应用实例。组件设计包含表情分类展示、响应式布局、与输入框的交互及样式定制等功能。通过核心技术实现,如将表情插入输入框光标位置和点击外部关闭选择器,确保用户体验流畅。同时探讨了性能优化策略,如懒加载和虚拟滚动,以及扩展性方案,如自定义主题和国际化支持。最终,展示了如何在聊天界面中集成该组件,为用户提供丰富的表情输入体验。
504 8
|
6月前
|
JavaScript 前端开发 UED
Vue 表情包输入组件实现代码及详细开发流程解析
这是一篇关于 Vue 表情包输入组件的使用方法与封装指南的文章。通过安装依赖、全局注册和局部使用,可以快速集成表情包功能到 Vue 项目中。文章还详细介绍了组件的封装实现、高级配置(如自定义表情列表、主题定制、动画效果和懒加载)以及完整集成示例。开发者可根据需求扩展功能,例如 GIF 搜索或自定义表情上传,提升用户体验。资源链接提供进一步学习材料。
282 1
|
8月前
|
存储 JavaScript 前端开发
基于 ant-design-vue 和 Vue 3 封装的功能强大的表格组件
VTable 是一个基于 ant-design-vue 和 Vue 3 的多功能表格组件,支持列自定义、排序、本地化存储、行选择等功能。它继承了 Ant-Design-Vue Table 的所有特性并加以扩展,提供开箱即用的高性能体验。示例包括基础表格、可选择表格和自定义列渲染等。
637 6
|
6月前
|
JavaScript 前端开发 UED
Vue 项目中如何自定义实用的进度条组件
本文介绍了如何使用Vue.js创建一个灵活多样的自定义进度条组件。该组件可接受进度段数据数组作为输入,动态渲染进度段,支持动画效果和内容展示。当进度超出总长时,超出部分将以红色填充。文章详细描述了组件的设计目标、实现步骤(包括props定义、宽度计算、模板渲染、动画处理及超出部分的显示),并提供了使用示例。通过此组件,开发者可根据项目需求灵活展示进度情况,优化用户体验。资源地址:[https://pan.quark.cn/s/35324205c62b](https://pan.quark.cn/s/35324205c62b)。
269 0
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
581 161
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
833 159