溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在vue中更優雅的封裝第三方組件

發布時間:2022-05-05 10:41:44 來源:億速云 閱讀:227 作者:iii 欄目:開發技術

本篇內容主要講解“怎么在vue中更優雅的封裝第三方組件”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么在vue中更優雅的封裝第三方組件”吧!

    一、需求場景描述

    實際開發的時候,為了減少重復造輪子,提高工作效率,節省開發時間成本, 免不了會使用ui組件庫,比如在web前端很受歡迎的element-ui。 但有的時候,我們需要在原組件的基礎上做些改造,比如一個image組件, 我們需要統一在圖片加載失敗的時候展示的特定圖,每次使用組件都加一遍, 麻煩耗時,關鍵是維護成本高,當需要更新這個加載出錯的圖片時, 得再次一個個去找到使用該組件的地方修改。

    再例如自定義分頁組件也很常見,組件的樣式,默認支持的每頁數目, 封裝之后再用,在可維護性和開發效率上都很有好處。

    然而也不至于從0開始寫一個分頁組件,在原有基礎上封裝就好, 那么如何快速優雅的封裝一個第三方組件庫的組件呢? v-bind="attrs"和v−on="listeners" ="$listeners",會給我們帶來驚喜。 它們可以使得封裝后的組件, “繼承”原組件的幾乎所有 v-bind 屬性和 v-on 事件,且用法和作用與在原組件一樣。

    封裝el-image 為 custom-image 組件,所有使用custom-image 展示圖片的地方, 圖片加載過程中都會統一展示“加載中...”的提示,且當加載出錯時,會展示統一的默認圖。 

    二、關鍵技術點介紹

    1.v-bind="$attrs"

    v-bind="$attrs"的妙用是在創建更高級別的組件,在封裝第三方組件時,

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

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

    一段摘自 vue 官網的介紹

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

    綁定 (class 和 style 除外)。當一個組件沒有聲明任何 prop 時,

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

    并且可以通過 v-bind="$attrs" 傳入內部組件——在創建高級別的組件時非常有用。

    例如我們封裝的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的時間監聽器向下傳入到使用了v-on="listeners"組件中,和v−bind="listeners"組件中, 和v-bind="listeners"組件中,和v−bind="attrs"的功效類似,只不過一個屬性一個是事件。還是custom-Image組件為例, 這時候custom-Image組件就擁有了el-image組件的幾乎所有事件。 而且其作用效果和用法,是和我們使用el-image是一樣的。

    包含了父作用域中的 (不含 .native 修飾器的) v-on 事件監聽器。

    它可以通過 v-on="$listeners" 傳入內部組件——在創建更高層次的組件時非常有用。

    一段摘自 vue 官網的介紹

    三、封裝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>

    到此,相信大家對“怎么在vue中更優雅的封裝第三方組件”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    vue
    AI

    亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女