如何在vue中更優(yōu)雅的封裝第三方組件詳解
一、需求場景描述
實(shí)際開發(fā)的時(shí)候,為了減少重復(fù)造輪子,提高工作效率,節(jié)省開發(fā)時(shí)間成本, 免不了會(huì)使用ui組件庫,比如在web前端很受歡迎的element-ui。 但有的時(shí)候,我們需要在原組件的基礎(chǔ)上做些改造,比如一個(gè)image組件, 我們需要統(tǒng)一在圖片加載失敗的時(shí)候展示的特定圖,每次使用組件都加一遍, 麻煩耗時(shí),關(guān)鍵是維護(hù)成本高,當(dāng)需要更新這個(gè)加載出錯(cuò)的圖片時(shí), 得再次一個(gè)個(gè)去找到使用該組件的地方修改。
再例如自定義分頁組件也很常見,組件的樣式,默認(rèn)支持的每頁數(shù)目, 封裝之后再用,在可維護(hù)性和開發(fā)效率上都很有好處。
然而也不至于從0開始寫一個(gè)分頁組件,在原有基礎(chǔ)上封裝就好, 那么如何快速優(yōu)雅的封裝一個(gè)第三方組件庫的組件呢? v-bind="attrs"和v−on="listeners" ="$listeners",會(huì)給我們帶來驚喜。 它們可以使得封裝后的組件, “繼承”原組件的幾乎所有 v-bind 屬性和 v-on 事件,且用法和作用與在原組件一樣。
封裝el-image 為 custom-image 組件,所有使用custom-image 展示圖片的地方, 圖片加載過程中都會(huì)統(tǒng)一展示“加載中...”的提示,且當(dāng)加載出錯(cuò)時(shí),會(huì)展示統(tǒng)一的默認(rèn)圖。 下面是一個(gè) custom-image 組件加載過程以及加載出錯(cuò)的效果。

二、關(guān)鍵技術(shù)點(diǎn)介紹
1.v-bind="$attrs"
v-bind="$attrs"的妙用是在創(chuàng)建更高級別的組件,在封裝第三方組件時(shí),
可以自動(dòng)將在父作用域中使用的v-bind的屬性自動(dòng)綁定,
并向下傳入被封裝的使用了v-bind="$attrs"的組件。
一段摘自 vue 官網(wǎng)的介紹
包含了父作用域中不作為 prop 被識別 (且獲取) 的 attribute
綁定 (class 和 style 除外)。當(dāng)一個(gè)組件沒有聲明任何 prop 時(shí),
這里會(huì)包含所有父作用域的綁定 (class 和 style 除外),
并且可以通過 v-bind="$attrs" 傳入內(nèi)部組件——在創(chuàng)建高級別的組件時(shí)非常有用。
例如我們封裝的custom-Image組件,使用了v-bind="$attrs"之后, 我們在custom-Image組件中,也擁有了el-image的幾乎所有屬性, 而且其作用效果和用法,是和我們使用el-image是一樣的, 也就說我們可以看著el-image的文章去使用custom-Image。
2.v-on="$listeners"
v-on="listeners"的作用和用法與v−bind="listeners"的作用和用法與v-bind="listeners"的作用和用法與v−bind="attrs"類似, 它可以將父作用域中的使用v-on的時(shí)間監(jiān)聽器向下傳入到使用了v-on="listeners"組件中,和v−bind="listeners"組件中, 和v-bind="listeners"組件中,和v−bind="attrs"的功效類似,只不過一個(gè)屬性一個(gè)是事件。還是custom-Image組件為例, 這時(shí)候custom-Image組件就擁有了el-image組件的幾乎所有事件。 而且其作用效果和用法,是和我們使用el-image是一樣的。
包含了父作用域中的 (不含 .native 修飾器的) v-on 事件監(jiān)聽器。
它可以通過 v-on="$listeners" 傳入內(nèi)部組件——在創(chuàng)建更高層次的組件時(shí)非常有用。
一段摘自 vue 官網(wǎng)的介紹
三、封裝el-image的代碼示例
使用custom-Image組件的示例
<custom-Image fit="fill" class="icon-img" :src="picPreview(expert)"></custom-Image>
封裝el-image為custom-Image組件的示例
<template>
<div id="CustomImage">
<el-image v-bind="$attrs" v-on="$listeners">
<div slot="error" class="image-slot">
<img :src="require('image-f/icon-empty-img.png')" alt="圖片加載失敗.png"/>
</div>
<div slot="placeholder" class="placeholder-slot">加載中...</div>
</el-image>
</div>
</template>
<script>
export default {
name: 'CustomImage'
}
</script>
<style scoped lang="scss">
#CustomImage {
.image-slot {
text-align: center;
}
.placeholder-slot {
text-align: center;
}
}
</style>總結(jié)
到此這篇關(guān)于如何在vue中更優(yōu)雅的封裝第三方組件的文章就介紹到這了,更多相關(guān)vue封裝第三方組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue2+SpringBoot實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出到csv文件并下載的使用示例
本文主要介紹了Vue2+SpringBoot實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出到csv文件并下載,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-10-10
深入解析Vue中的this.$forceUpdate()的使用
this.$forceUpdate()?是一個(gè)重要的實(shí)例方法,本文主要介紹了深入解析Vue中的this.$forceUpdate()的使用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07
基于vue+echarts 數(shù)據(jù)可視化大屏展示的方法示例
這篇文章主要介紹了基于vue+echarts 數(shù)據(jù)可視化大屏展示的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2020-03-03
el-form錯(cuò)誤提示信息手動(dòng)添加和取消的示例代碼
這篇文章主要介紹了el-form錯(cuò)誤提示信息手動(dòng)添加和取消,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
vue2.0使用swiper組件實(shí)現(xiàn)輪播的示例代碼
下面小編就為大家分享一篇vue2.0使用swiper組件實(shí)現(xiàn)輪播的示例代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03
Vue實(shí)例初始化為渲染函數(shù)設(shè)置檢查源碼剖析
這篇文章主要為大家介紹了Vue實(shí)例初始化為渲染函數(shù)設(shè)置檢查源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
解決vue無法加載文件C:\Users\Administrator\AppData\Roaming\npm\vue.ps
這篇文章主要介紹了解決vue無法加載文件C:\Users\Administrator\AppData\Roaming\npm\vue.ps1因?yàn)樵诖讼到y(tǒng)上禁止運(yùn)行腳本問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03

