<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          在 Vue 中更優(yōu)雅的封裝第三方組件

          共 1996字,需瀏覽 4分鐘

           ·

          2022-06-07 19:19

          在vue中更優(yōu)雅的封裝第三方組件

          一、需求場(chǎng)景描述

          實(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="attrs" 和 v-on="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ò)的效果。

          GIF 2022-4-15 15-58-13.gif

          二、關(guān)鍵技術(shù)點(diǎn)介紹

          1.v-bind="$attrs"

          v-bind="$attrs"的妙用是在創(chuàng)建更高級(jí)別的組件,在封裝第三方組件時(shí),

          可以自動(dòng)將在父作用域中使用的v-bind的屬性自動(dòng)綁定,

          并向下傳入被封裝的使用了v-bind="$attrs"的組件。

          一段摘自 vue 官網(wǎng)的介紹

          包含了父作用域中不作為 prop 被識(shí)別 (且獲取) 的 attribute

          綁定 (class 和 style 除外)。當(dāng)一個(gè)組件沒有聲明任何 prop 時(shí),

          這里會(huì)包含所有父作用域的綁定 (class 和 style 除外),

          并且可以通過 v-bind="$attrs" 傳入內(nèi)部組件——在創(chuàng)建高級(jí)別的組件時(shí)非常有用。

          例如我們封裝的custom-Image組件,使用了v-bind="$attrs"之后, 我們?cè)赾ustom-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>


          關(guān)于本文

          來自:靈扁扁

          https://juejin.cn/post/7087728529512759332

          最后

          歡迎關(guān)注【前端瓶子君】??ヽ(°▽°)ノ?
          回復(fù)「算法」,加入前端編程源碼算法群,每日一道面試題(工作日),第二天瓶子君都會(huì)很認(rèn)真的解答喲!
          回復(fù)「交流」,吹吹水、聊聊技術(shù)、吐吐槽!
          回復(fù)「閱讀」,每日刷刷高質(zhì)量好文!
          如果這篇文章對(duì)你有幫助,在看」是最大的支持
          ?》》面試官也在看的算法資料《《
          “在看和轉(zhuǎn)發(fā)”就是最大的支持
          瀏覽 35
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天做天天爱天天高潮 | 大鳮巴久久久久久久久 | 日韩AV小电影 | 回本Aa一级黄色视屏 | 国产精品久久网 |