# Vue 组件
# 创建组件
# extend 方法
const component = Vue.extend({
template:"<h1>hello Vue</h1>", // 通过 template 属性指定了组件要展示的 html 结构
data() {
return { /* ... */ }
},
methods: { /* ... */ }
})
# component 方法
- 会注册为全局组件
import Vue from 'vue'
import Component from './component'
Vue.component('myComponent', Component)
// 或者直接写 模板 不推荐
Vue.component('myComponent2', {
template:'<h1>hello</h1>'
})
# 局部注册组件
<template>
<my-component></my-component>
</template>
<script>
import MyComponent from './component'
export default {
components: {
MyComponent // 属于实例自身的组件
}
}
</script>
# 动态组件
- Vue提供了
<component>标签来展示对应名称的组件。<component>是一个占位符。:is属性可以用来设置展示组件的名称
<template>
<component :is="component"></component>
</template>
<script>
import A from './A'
import B from './B'
export default {
components: {
A,
B
},
data() {
return {
component: 'A'
}
}
}
</script>
# extend 补充
- 使用
extend创建组件构造函数
import Vue from 'vue'
import MyComponent from './myComponent'
// 通过extend创建一个构造对象
const Constructor = Vue.extend(MyComponent)
export default function showComponent(text: string) {
// 创建一个组件实例
const instance = new Constructor({
// 可以不传 el 属性 通过instance.$mount(document.createELement("div")) 效果一样的
el: document.createELement("div"),
data() {
return {
text
}
}
})
// 将新的组件实例插入到body中
document.body.appendChild(instance.$el)
return () => instance.$el.parentNode.removeChild()
}
// 使用方法
const close = showComponent('Hello Vue')
// 关闭
close()
← 常用属性 Props & Emits →