十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章給大家分享的是有關(guān)怎樣抽象一個(gè)Vue公共組件的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元南皮做網(wǎng)站,已為上家服務(wù),為南皮各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792先上 Demo 與 源碼。(demo最好在瀏覽器里以手機(jī)模式瀏覽)
在講具體實(shí)現(xiàn)前,我想先分享下自己認(rèn)為的理想的公用組件是什么樣的:
1. 黑盒性,即除了你自己以外,其他的開發(fā)者在快速閱讀使用文檔之后可以立刻上手,而不用關(guān)心你的內(nèi)部實(shí)現(xiàn);
2. 獨(dú)立性,即做好解耦,不與父組件有過多關(guān)聯(lián);
3 自定義性,適當(dāng)?shù)乇┞兑恍┹斎虢涌诨蛘叻椒ńo外部用于自定義,同時(shí)也要設(shè)置好這些屬性在外部未輸入時(shí)的默認(rèn)值。
下面我們先以黑盒的方式看看 demo 中數(shù)字鍵盤組件是如何調(diào)用的(已省略非關(guān)鍵部分代碼)。
App.vue
......
如上,最基本的調(diào)用就完成了。效果如下:
接著,點(diǎn)擊 1-6 與“確定”。如果如下:
可以看到數(shù)字鍵盤已經(jīng)如我們預(yù)期工作了,接下來分析下該數(shù)字鍵盤組件所有的輸入項(xiàng)。
@change-event:該事件為自定義事件,父組件通過 v-on 注冊監(jiān)聽,子組件內(nèi)部通過 $emit 進(jìn)行觸發(fā)(更多自定義事件相關(guān)內(nèi)容請參考:Vue官方教程)。
每一次點(diǎn)擊數(shù)字按鍵以及退格鍵均會(huì)觸發(fā)該事件,其傳遞兩個(gè)參數(shù):value,累積點(diǎn)擊的字符組合;currentValue,當(dāng)前點(diǎn)擊的字符。父組件通過 handleChange 方法接收該事件的回調(diào)內(nèi)容。
@submit-event:當(dāng)點(diǎn)擊“確定”鍵即會(huì)觸發(fā)該事件,其不傳遞參數(shù),只是告訴父組件“我的確定按鈕被點(diǎn)擊了,你要做什么操作自己看著辦吧,之前點(diǎn)擊的數(shù)字已經(jīng)通過 change-event 傳給你了”。父組件通過 handleSubmit 方法接收回調(diào)。
如果只寫這兩個(gè)方法未免也太沒誠意了,我還根據(jù)一些場景編寫了以下幾個(gè)自定義屬性。
max:大輸入長度,超過的部分將不會(huì)觸發(fā) change-event 事件,默認(rèn)無限制。
sp-key:自定義的特殊字符,如身份證輸入時(shí)的“X”,會(huì)添加到左下角空白格,默認(rèn)無。
random:是否打亂數(shù)字順序,一些有關(guān)銀行賬戶或密碼的輸入經(jīng)常會(huì)見到這種場景,默認(rèn) false。
從上面的幾個(gè)自定義屬性與事件,我們大概知道了父組件是如何向子組件傳值以及監(jiān)聽子組件的變化,但父組件該如何直接調(diào)用子組件內(nèi)部的函數(shù)呢?我們看下面這個(gè)場景。
數(shù)字鍵盤上的鍵盤圖標(biāo),點(diǎn)擊之后會(huì)將數(shù)字鍵盤收起隱藏。組件內(nèi)部擁有一個(gè)方法 keyboardToggle(true|false) 來控制鍵盤的彈起和收回,那么如果在組件外部也想調(diào)用這個(gè)方法呢?比如當(dāng)父組件中的 input 獲取到焦點(diǎn)時(shí)。
可以通過 Vue 中的 ref 屬性來獲取到鍵盤的組件引用,從而調(diào)用其內(nèi)部的方法,如下:
$refs.[refName].keyboardToggle(true|false)
以上面這種形式便可以在父組件上下文中調(diào)用子組件內(nèi)的方法。
$refs.[refName].handleInit()
數(shù)字鍵盤組件內(nèi)部的初始化方法,用于重新渲染組件。若 random 屬性為 true,則數(shù)字鍵會(huì)刷新隨機(jī)排列。
$refs.[refName].handleClear()
清除之前輸入的字符組合,并觸發(fā) change-event 且返回空字符串。
上面分享了這個(gè)組件所有對外的屬性與事件,可以發(fā)現(xiàn)我們并未看過該組件內(nèi)部的一行代碼,但已經(jīng)可以完整的使用它了,下面來聊聊內(nèi)部實(shí)現(xiàn)。
首先來看看布局,我將鍵盤分為左右兩部分,右邊部分不用多說,左邊的部分是將一個(gè)鍵位數(shù)組通過 v-for 循環(huán)生成。
那么是如何讓 0 和 9 之間空出一格呢,下面看下初始化鍵盤組件的方法。
keyboard.vue
handleInit()
{{item}}//鍵盤圖標(biāo)//...
即在鍵位數(shù)組倒數(shù)第二位插入一個(gè)空字符,然后循環(huán)生成按鍵。下面看下自定義參數(shù)是如何生效的。
sp-key
在組件內(nèi)部通過 props 屬性接收父組件傳遞的 spKey,之后就可在組件內(nèi)的屬性和方法中通過 this.spKey 進(jìn)行訪問。首先判斷 spKey 值是否有效,并代替空字符插入鍵位數(shù)組倒數(shù)第二項(xiàng)。
random
將鍵位打亂順序其實(shí)也很簡單,只要通過數(shù)組的 sort 方法。sort 方法可以接收一個(gè)函數(shù)作為參數(shù),若函數(shù)返回正數(shù)則交換前后兩項(xiàng)的位置,若函數(shù)返回負(fù)數(shù)則不作交換。所以將兩個(gè)隨機(jī)數(shù)相減的結(jié)果返回,即可將鍵位數(shù)組隨機(jī)排序。
下面看看在組件內(nèi)部是如何觸發(fā) change-event 的。
handleInput()
//...{{item}}//鍵盤圖標(biāo)
增加了 max 屬性后修改方法如下:
handleInput(value) { let max = Number(this.max); if (!isNaN(max) && this.inputStr.length+1 > max) { return; } this.inputStr += value; this.$emit('change-event', this.inputStr, value); }
最后看看退格刪除是如何實(shí)現(xiàn)的。
handleDelete()
handleDelete() { let str = this.inputStr; if (!str.length) return; this.inputStr = str.substring(0, str.length - 1); this.$emit('change-event', this.inputStr); }
感謝各位的閱讀!關(guān)于“怎樣抽象一個(gè)Vue公共組件”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。