這篇文章主要為大家展示了“vue如何使用高階組件”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“vue如何使用高階組件”這篇文章吧。
創(chuàng)新互聯(lián)建站專注于企業(yè)全網(wǎng)整合營銷推廣、網(wǎng)站重做改版、沙河口網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、商城網(wǎng)站制作、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價格優(yōu)惠性價比高,為沙河口等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
高階組件
1 一般情況
// 父組件 <BaseInput :value="value" label="密碼" placeholder="請?zhí)顚懨艽a" @input="handleInput" @focus="handleFocus"> </BaseInput> // 子組件 <template> <label> {{ label }} <input :value=" value" :placeholder="placeholder" @focus="$emit('focus', $event)" @input="$emit('input', $event.target.value)"> </label> </template>
2 優(yōu)化
1 每一個從父組件傳到子組件的props,我們都得在子組件的Props中顯式的聲明才能使用。這樣一來,我們的子組件每次都需要申明一大堆props, 而類似placeholer這種dom原生的property我們其實(shí)完全可以使用 $attrs 直接從父傳到子,無需聲明。方法如下:
<input :value="value" v-bind="$attrs" @input="$emit('input', $event.target.value)">
$attrs 包含了父作用域中不作為 prop 被識別 (且獲取) 的特性綁定 (class 和 style 除外)。當(dāng)一個組件沒有聲明任何 prop 時,這里會包含所有父作用域的綁定,并且可以通過 v-bind="$attrs" 傳入內(nèi)部組件——在創(chuàng)建更高層次的組件時非常有用。
2 注意到子組件的 @focus="$emit('focus', $event)"
其實(shí)什么都沒做,只是把event傳回給父組件而已,那其實(shí)和上面類似,完全沒必要顯式地申明:
<input :value="value" v-bind="$attrs" v-on="listeners"/> computed: { listeners() { return { ...this.$listeners, input: event => this.$emit('input', event.target.value) } } }
$listeners 包含了父作用域中的 (不含 .native 修飾器的)v-on 事件監(jiān)聽器。它可以通過 v-on="$listeners" 傳入內(nèi)部組件——在創(chuàng)建更高層次的組件時非常有用。
需要注意的是,由于我們input并不是BaseInput這個組件的根節(jié)點(diǎn),而默認(rèn)情況下父作用域的不被認(rèn)作 props 的特性綁定將會“回退”且作為普通的 HTML 特性應(yīng)用在子組件的根元素上。所以我們需要設(shè)置 inheritAttrs: false ,這些默認(rèn)行為將會被去掉,以上兩點(diǎn)的優(yōu)化才能成功。
以上是“vue如何使用高階組件”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
新聞名稱:vue如何使用高階組件
網(wǎng)頁URL:http://sd-ha.com/article46/jsjdeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、網(wǎng)站制作、App開發(fā)、品牌網(wǎng)站制作、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)