Vue动态组件(component)全面解析
Vue的<component>
元素是一个特殊的”元组件”,用于动态渲染组件。
基本用法
1
| <component :is="currentComponent"></component>
|
is
属性决定当前渲染哪个组件,可以是:
- 已注册的组件名(字符串)
- 组件选项对象
- 异步组件函数
属性绑定
动态组件可以像普通组件一样绑定属性:
1 2 3 4 5 6
| <component :is="currentComponent" :title="pageTitle" :content="pageContent" :disabled="isDisabled" ></component>
|
事件处理
动态组件可以监听和触发事件:
1 2 3 4 5
| <component :is="currentComponent" @click="handleClick" @submit="handleSubmit" ></component>
|
结合keep-alive
使用<keep-alive>
缓存组件状态:
1 2 3
| <keep-alive> <component :is="currentComponent"></component> </keep-alive>
|
实际应用示例
- 标签页切换:
1 2 3 4 5 6
| data() { return { tabs: ['Home', 'Posts', 'Archive'], currentTab: 'Home' } }
|
1 2 3 4 5 6 7 8 9
| <button v-for="tab in tabs" :key="tab" @click="currentTab = tab" > {{ tab }} </button>
<component :is="currentTab + 'Component'"></component>
|
- 动态表单字段:
1 2 3 4 5 6 7
| <component v-for="field in formFields" :is="field.type + 'Field'" :key="field.id" :field="field" @change="updateField" ></component>
|
注意事项
- 动态组件切换时会触发生命周期钩子
- 使用keep-alive可以保留组件状态
- 确保动态组件名称/选项是有效的
- 对于频繁切换的组件,考虑性能优化