平常中咱們要使用一個彈框組件的方式一般是先經過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
上,該元素的全部子元素都會消失被替換手動
的去作組件的掛載和銷燬
。