平常中咱们要使用一个弹框组件的方式一般是先经过Vue.component 全局或是 component 局部注册后,而后在模版中使用。接下来咱们尝试编程式的使用组件。编程
其实步骤很简单bash
其实想要插入一个元素,经过 document.createElement 就能够实现,并不是必定须要上面两步,可是涉及到组件的复杂度、样式设置、可维护性因此使用建立构造器的方式比较可行。app
首先来定义这个弹框的结构和样式,就是正常的写组件便可函数
<template>
<div class="grid">
<h1 class="head">这里是标题</h1>
<div @click="close">{{ cancelText }}</div>
<div @click="onSureClick">{{ sureText }}</div>
</div>
</template>
<script>
export default {
props:{
close:{
type:Function,
default:()=>{}
},
cancelText:{
type:String,
default:'取消'
},
sureText:{
type:String,
default:'肯定'
}
},
methods:{
onSureClick(){
// 其余逻辑
this.close()
}
}
};
</script>
复制代码
将建立构造器和挂载到目标元素上的逻辑抽离出来,多处能够复用ui
export function extendComponents(component,callback){
const Action = Vue.extend(component)
const div = document.createElement('div')
document.body.appendChild(div)
const ele = new Action({
propsData:{
cancelText:'cancel',
sureText:'sure',
close:()=>{
ele.$el.remove()
callback&&callback()
}
}
}).$mount(div)
}
复制代码
上面代码须要注意如下几点:this
须要注意
的是 props 的值须要经过 propsData 属性来传递#app
上,这个挂载的过程是将目标元素的内容所有替换
,因此一旦挂载到 #app
上,该元素的全部子元素都会消失被替换手动
的去作组件的挂载和销毁
。