摘要:中通過動態(tài)創(chuàng)建實(shí)例在中,如果我們想要動態(tài)地來控制一個組件的顯示和隱藏,比如通過點(diǎn)擊按鈕顯示一個對話框或者彈出一條信息。通過創(chuàng)建構(gòu)造器這個構(gòu)造器用于需要顯示是創(chuàng)建實(shí)例。
Vue中通過Vue.extend動態(tài)創(chuàng)建實(shí)例
在Vue中,如果我們想要動態(tài)地來控制一個組件的顯示和隱藏,比如通過點(diǎn)擊按鈕顯示一個對話框或者彈出一條信息。我們通常會提前寫好這個組件,然后通過v-if = “show”來控制它的顯示隱藏。如下所示:
這是一條通過按鈕控制顯示隱藏的信息
另外還有一種實(shí)現(xiàn)方法就是通過Vue.extend來動態(tài)地創(chuàng)建實(shí)例,在想要進(jìn)行顯示的時候創(chuàng)建實(shí)例。
在需要隱藏的時候刪除這個實(shí)例。
通過Vue.extend創(chuàng)建構(gòu)造器,這個構(gòu)造器用于需要顯示是創(chuàng)建實(shí)例。
const Constructor = Vue.extend({
template:` {{message}} `,
data(){
return {
message:"這是一條通過按鈕控制顯示隱藏的信息"
}
}
})
需要顯示時創(chuàng)建實(shí)例
showHandle(){ const MessageCom = this.MessageCom = new Constructor({ propsData:{ show:true } }).$mount(); this.$refs.message.appendChild(MessageCom.$el); }
需要隱藏時刪除實(shí)例
hiddenHandle(){ this.MessageCom.$el.remove() this.MessageCom.$destroy() this.MessageCom = null }
這樣的話就同樣實(shí)現(xiàn)了一個顯示,隱藏效果。
使用場景通過上面的分析,我們發(fā)現(xiàn)這種操作完全沒有必要,相比于通過屬性來控制顯示和隱藏;創(chuàng)建實(shí)例顯得更加麻煩。
但是它同樣具有一定的使用場景。比如:單元測試時:
在進(jìn)行單元測試時,為了實(shí)現(xiàn)在Vue中的測試,我們必須創(chuàng)建一個基于某個組件的實(shí)例,然后才能進(jìn)行測試。
如下所示:
it("可以設(shè)置icon.", () => { const Constructor = Vue.extend(Button) const vm = new Constructor({ propsData: { icon: "settings" } }).$mount() const useElement = vm.$el.querySelector("use") expect(useElement.getAttribute("xlink:href")).to.equal("#i-settings") vm.$destroy() })替代DOM操作
在一些場合下,我們可能需要創(chuàng)建一個div這種,通常的實(shí)現(xiàn)方式如下:
let oDiv = document.createElement(); oDiv.innerHTML = "hello,world"; document.body.appendChild(oDiv);
但是,在Vue中操作DOM是非常不推薦的寫法,這時候我們建議使用Vue.extend來實(shí)現(xiàn)DOM的操作。
const Constructor = Vue.extend(Toast); let oDiv = new Constructor(); oDiv.$slots.default = [message]; oDiv.$mount(); //必須使用$mount()進(jìn)行掛載,否則所有的生命周期的函數(shù)都不會執(zhí)行 document.body.appendChild(oDiv.$el)總結(jié):
Vue.extend可以用于動態(tài)地創(chuàng)建實(shí)例,在一些場景下可以使用。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/106707.html
摘要:當(dāng)表達(dá)式的值發(fā)生變化時,響應(yīng)應(yīng)用特定的行為到。指的是否重復(fù),對重復(fù)的進(jìn)行服用循環(huán)中,表示數(shù)組第個元素表示對象的樣式綁定樣式也可以根據(jù)中的變量來動態(tài)確定。 介紹 前段時間接觸到一個庫叫做Vue.js, 個人感覺很棒,所以整理了一篇博文做個介紹。Vue讀音/vju:/,和view類似。是一個數(shù)據(jù)驅(qū)動的web界面庫。Vue.js只聚焦于視圖層,可以很容易的和其他庫整合。代碼壓縮后只有24kb...
摘要:的介紹就直接連接到官網(wǎng)了,官網(wǎng)介紹很詳細(xì)了介紹構(gòu)造函數(shù)在使用之前我們首先需要構(gòu)建實(shí)例以上代碼是通過構(gòu)建了一個實(shí)例,構(gòu)造函數(shù)中是一個對象,上面代碼我用了一個空的對象,對象中可以包含數(shù)據(jù)模板掛載元素方法生命周期鉤子等選項(xiàng)。 使用過一段時間的vue1.0,現(xiàn)在vue已經(jīng)更新了很多版本了,語法在很多地方也有了變化。在此記錄一下重新學(xué)習(xí)的過程以及對vue的一些自己的理解。vue的介紹就直接連接...
摘要:注意指令前面需要加,對指令傳遞數(shù)據(jù)賦值使用例如約定速成加上,表示自定義指令不要使用駝峰式命名。需要通過方法實(shí)現(xiàn)自定義指令注冊完成。 vue Vue.js 構(gòu)建數(shù)據(jù)驅(qū)動的web界面庫。集中實(shí)現(xiàn)MVVM 的 VM層。容易與其他庫或項(xiàng)目整合 通過盡可能簡單的API實(shí)現(xiàn)相應(yīng)的數(shù)據(jù)綁定和組合的視圖組件核心:相應(yīng)的數(shù)據(jù)綁定系統(tǒng), 數(shù)據(jù)與DOM保持同步數(shù)據(jù)驅(qū)動的視圖,普通的HTML模板中使用特殊的語...
摘要:兩個對象鍵名沖突時,取組件對象的鍵值對。允許聲明擴(kuò)展另一個組件可以是一個簡單的選項(xiàng)對象或構(gòu)造函數(shù),而無需使用。這主要是為了便于擴(kuò)展單文件組件。 Vue作為最近最炙手可熱的前端框架,其簡單的入門方式和功能強(qiáng)大的API是其優(yōu)點(diǎn)。而同時因?yàn)槠銩PI的多樣性和豐富性,所以他的很多開發(fā)方式就和一切基于組件的React不同,如果沒有對Vue的API(有一些甚至文檔都沒提到)有一個全面的了解,那么在...
摘要:一簡單的使用主要用于需要動態(tài)渲染的組件,或者類似于提示組件注意創(chuàng)建的是一個組件構(gòu)造器,而不是一個具體的組件實(shí)例屬于的全局,在實(shí)際業(yè)務(wù)開發(fā)中我們很少使用,因?yàn)橄啾瘸S玫膶懛ㄊ褂貌襟E要更加繁瑣一些。 最近在重構(gòu)公司的項(xiàng)目,有些組件想要封裝的更靈活,例如toast、loading、messageBox等彈窗組件,模仿了mint-ui封裝此類組件的方式封裝了自己的彈窗組件; mint-UI的t...
閱讀 3280·2023-04-26 02:09
閱讀 2574·2021-11-24 09:39
閱讀 3268·2021-11-16 11:52
閱讀 3614·2021-10-26 09:50
閱讀 2771·2021-10-08 10:05
閱讀 2456·2021-09-22 15:25
閱讀 3299·2019-08-30 13:14
閱讀 908·2019-08-29 17:06