成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在 Vue 中更優雅的封裝第三方組件

開發
實際開發的時候,為了減少重復造輪子,提高工作效率,節省開發時間成本, 免不了會使用ui組件庫。

一、需求場景描述

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

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

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

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

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

二、關鍵技術點介紹

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>
責任編輯:張燕妮 來源: 高級前端進階
相關推薦

2023-07-11 08:12:49

OkHttp工具網絡

2017-05-16 13:24:02

LinuxCentOS第三方倉庫

2017-12-11 15:53:56

2021-03-03 09:42:26

鴻蒙HarmonyOS圖片裁剪

2015-11-05 16:44:37

第三方登陸android源碼

2011-07-25 14:14:49

iPhone SQLITE Pldatabase

2024-04-03 12:57:29

2021-04-29 14:32:24

鴻蒙HarmonyOS應用

2021-03-10 15:03:40

鴻蒙HarmonyOS應用

2021-03-12 16:35:33

鴻蒙HarmonyOS應用

2021-03-24 09:30:49

鴻蒙HarmonyOS應用

2021-04-09 16:13:10

HooksReact架構

2021-08-03 10:07:41

鴻蒙HarmonyOS應用

2021-03-01 14:00:11

鴻蒙HarmonyOS應用

2022-01-14 09:57:14

鴻蒙HarmonyOS應用

2011-10-08 14:37:59

漏洞

2019-07-30 11:35:54

AndroidRetrofit

2014-07-23 08:55:42

iOSFMDB

2013-08-14 09:50:32

iOS類庫

2021-01-27 10:04:46

鴻蒙HarmonyOS動畫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 羞羞视频免费观看入口 | 成年人黄色一级片 | 中文字幕免费观看 | 日本五月婷婷 | 久久国内精品 | 操操日 | 精品无码久久久久久国产 | 欧美日韩精品免费观看 | 天天综合亚洲 | 亚洲国产成人在线观看 | 国产成人自拍av | 精品一区二区不卡 | 成人国产精品免费观看视频 | 伊人久久综合 | 成人久久久 | 伊人网综合 | 草草视频在线播放 | 国产成人一区二区 | 四虎av电影 | 国产精品九九九 | www.国产日本 | 羞羞视频在线观看网站 | 国产美女精品视频免费观看 | 久久久99精品免费观看 | 国产亚洲精品综合一区 | 国产精品久久久久久52avav | 国产精品欧美大片 | 成人字幕网zmw | 久草新在线 | 亚洲久久久 | 亚洲国产成人久久综合一区,久久久国产99 | 91中文字幕在线观看 | 欧美精品一区二区三区蜜桃视频 | 欧洲免费视频 | 精品国产鲁一鲁一区二区张丽 | 国产精品一区久久久 | 一级黄色裸片 | 欧美二三区 | 另类视频区| 国产精品完整版 | 少妇特黄a一区二区三区88av |