vue 动态组件实现
Vue 动态组件实现方法
Vue 的动态组件功能通过 <component> 标签和 is 属性实现,允许根据条件或用户交互切换不同的组件。
基本用法
使用 <component :is="currentComponent"> 语法,currentComponent 可以是一个已注册的组件名或组件选项对象:

<template>
<component :is="currentComponent"></component>
</template>
<script>
import ComponentA from './ComponentA.vue'
import ComponentB from './ComponentB.vue'
export default {
components: { ComponentA, ComponentB },
data() {
return {
currentComponent: 'ComponentA'
}
}
}
</script>
动态切换组件
通过方法或计算属性动态改变 currentComponent 的值:
<template>
<button @click="toggleComponent">切换组件</button>
<component :is="currentComponent"></component>
</template>
<script>
export default {
data() {
return {
showA: true
}
},
computed: {
currentComponent() {
return this.showA ? 'ComponentA' : 'ComponentB'
}
},
methods: {
toggleComponent() {
this.showA = !this.showA
}
}
}
</script>
保持组件状态
使用 <keep-alive> 包裹动态组件可以保留组件状态,避免重复渲染:

<keep-alive>
<component :is="currentComponent"></component>
</keep-alive>
传递 Props 和事件
动态组件可以像普通组件一样接收 props 和触发事件:
<component
:is="currentComponent"
:someProp="data"
@customEvent="handleEvent"
></component>
高级用法:组件对象
可以直接使用组件对象而非字符串名称:
data() {
return {
currentComponent: {
template: '<div>动态模板</div>'
}
}
}
注意事项
- 动态组件名称需在
components选项中注册 - 动态切换组件时,默认会销毁旧组件实例
- 大量动态组件切换可能影响性能,需合理使用
keep-alive - 组件名需使用 kebab-case(如
my-component)或 PascalCase(如MyComponent)






