国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

記錄--Vue中的$attrs你真的會用嗎?

這篇具有很好參考價值的文章主要介紹了記錄--Vue中的$attrs你真的會用嗎?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

這里給大家分享我在網(wǎng)上總結(jié)出來的一些知識,希望對大家有所幫助

記錄--Vue中的$attrs你真的會用嗎?

先來看一個業(yè)務(wù)需求:

項目經(jīng)常會遇到產(chǎn)品經(jīng)理要求你做某組件一樣的功能,還要在它的基礎(chǔ)上增加?xùn)|西。如何只用少量代碼高效的二次封裝組件呢?

例如我要做一個element-ui的input組件進行封裝,以下是封裝要求:

  1. 對el-input組件增加某些定制功能
  2. 調(diào)整el-input的原有css樣式
  3. 封裝后不得更改原有el-input的所有功能

文章最后會給出element-ui的input組件二次封裝的示例。

先來介紹一下attrs吧

在 Vue2 中,attr 是指組件接收的 HTML 特性(attribute),通過 props 的方式傳遞給子組件。而在 Vue3 中,attr 的概念被引入了 Composition API 中,并且被用于管理各種配置項。

下面介紹一些 attr 的使用技巧:

Vue2 中使用 attr

  1. 使用 v-bind指令綁定 HTML 屬性

在 Vue2 中,如果想將父組件傳遞的 HTML 屬性傳遞給子組件進行使用,可以在子組件中通過 props 接收參數(shù),并使用 v-bind 指令將其綁定到子組件的 HTML 元素上。例如:

<template>
  <div class="demo-component" :style="styleObject">{{ message }}</div>
</template>

<script>
export default {
  name: "DemoComponent",
  props: {
    message: String,
    styleObject: Object,
  },
};
</script>

在父組件中使用該組件時,可以通過 v-bind 指令將 HTML 特性傳遞給子組件:

<template>
  <demo-component message="Hello, world!" :style-object="{ color: 'red' }"></demo-component>
</template>
  1. 使用 $attrs 對象傳遞所有未被 props 所接收的特性

在 Vue2 中,可以通過 $attrs 對象獲取父組件傳遞給子組件但未被 props 所接收的特性,從而實現(xiàn)組件復(fù)用和擴展的目的。例如:

<template>
  <div class="demo-component" :style="styleObject" v-bind="$attrs">{{ message }}</div>
</template>

<script>
export default {
  name: "DemoComponent",
  props: {
    message: String,
    styleObject: Object,
  },
};
</script>

在父組件使用該組件時,可以像平常傳遞普通的 HTML 特性一樣,同時還可以傳遞一些自定義的特性:

<template>
  <demo-component
    message="Hello, world!"
    :style-object="{ color: 'red' }"
    custom-attribute="something"
  ></demo-component>
</template>

在子組件中,可以通過 this.$attrs 屬性獲取父組件傳遞給子組件但未被 props 所接收的特性:

console.log(this.$attrs.customAttribute); // 輸出:something

Vue3 中使用 attr

在 Vue3 中,可以通過 setup 函數(shù)中的第二個參數(shù) context 來訪問該組件的配置選項,其中包括了所有未被 props 所接收的特性:

<template>
  <div class="demo-component" :style="styleObject" v-bind="$attrs">{{ message }}</div>
</template>

<script>
export default {
  name: "DemoComponent",
  props: {
    message: String,
    styleObject: Object,
  },
  setup(props, context) {
    console.log(context.attrs.customAttribute); // 輸出:something
  },
};
</script>

在 setup 函數(shù)中,通過 context.attrs 獲取父組件傳遞給子組件但未被 props 所接收的特性。

除了 $attrs,Vue3 中還引入了 $props 對象,它是一個由 props 組成的響應(yīng)式對象,在組件內(nèi)部通過解構(gòu)賦值可以快速地訪問 props 的屬性值:

<template>
  <div class="demo-component" :style="styleObject">{{ message }}</div>
</template>

<script>
export default {
  name: "DemoComponent",
  props: {
    message: String,
    styleObject: Object,
  },
  setup(props) {
    const { message, styleObject } = props;
    console.log(message, styleObject); // 輸出:Hello, world! { color: 'red' }
  },
};
</script>

在 setup 函數(shù)中,通過解構(gòu)賦值可以快速地訪問 props 的屬性值。

利用 $attrs$listeners 可以在二次封裝 element-ui 組件時非常方便地傳遞組件屬性和事件。

示例代碼

下面以 el-input 組件為例,演示一下vue2中如何高效地二次封裝 element-ui 組件,從而達到只用少量代碼在原有組件上升級的效果:

<template>
  <el-input v-bind="$attrs" v-on="$listeners" :class="{ 'is-invalid': isError }">
    <template v-if="isError" #append>
      <i class="el-input__icon el-icon-circle-close"></i>
    </template>
  </el-input>
</template>

<script>
export default {
  name: "MyInput",
  inheritAttrs: false,
  props: {
    isError: Boolean, // 是否顯示錯誤提示
  },
};
</script>
<style scoped lang="scss">
//這是寫自己的樣式內(nèi)容
</style>

解釋一下上面代碼的內(nèi)容吧:

  1. 使用 v-bind="$attrs" 將父級組件所有的未被 props 所接收的特性綁定到 el-input 組件上。

  2. 使用 v-on="$listeners" 將父級組件傳遞給當(dāng)前組件的所有事件監(jiān)聽器綁定到 el-input 組件上。

  3. 在模板中可以很方便地使用 isError 屬性來擴展組件,并且不需要在父組件中再次定義。

需要注意的是,由于 element-ui 組件本身也包含了一些默認(rèn)的屬性和事件,因此需要在組件中設(shè)置 inheritAttrs: false,以避免傳遞 element-ui 組件自帶的屬性和事件。

本文轉(zhuǎn)載于:

https://juejin.cn/post/7221357811288260664

如果對您有所幫助,歡迎您點個關(guān)注,我會定時更新技術(shù)文檔,大家一起討論學(xué)習(xí),一起進步。

?記錄--Vue中的$attrs你真的會用嗎?文章來源地址http://www.zghlxwxcb.cn/news/detail-819290.html

到了這里,關(guān)于記錄--Vue中的$attrs你真的會用嗎?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 快看!華為Python搶購腳本你會用嗎?

    快看!華為Python搶購腳本你會用嗎?

    目錄 1.前言 2.原理 3.下載Python 4.安裝瀏覽器 5.安裝瀏覽器驅(qū)動 6.安裝依賴包 7.配置文件修改 8.運行main.py 9.特別說明 10.關(guān)注我 微信公眾號:漫漫編程路 PS:公眾號后臺回復(fù) “HW” 獲取搶購軟件??! 1.前言 ??鑒于最近不少小伙伴的后臺的留言與提問,很多是關(guān)于該腳本如何使

    2024年01月22日
    瀏覽(17)
  • selenium執(zhí)行js代碼的兩個方法你都會用嗎?

    selenium執(zhí)行js代碼的兩個方法你都會用嗎?

    在使用selenium做web自動化的時候,很多小伙伴反饋有些頁面上動作我們無法通過selenium封裝的方法直接去做,比如說修改元素的屬性,影子節(jié)點的操作等等。需要使用原生的js代碼去實現(xiàn),而selenium也給我提供了兩個執(zhí)行js代碼的方法,一個是execute_script,另一個是execute_async_s

    2024年04月28日
    瀏覽(21)
  • Python中最常用的5種線程鎖,你都會用嗎

    對于日常開發(fā)者來講很少會使用到本章節(jié)的內(nèi)容,但是對框架作者等是必備知識,同時也是高頻的面試常見問題。 線程安全是多線程或多進程編程中的一個概念,在擁有共享數(shù)據(jù)的多條線程并行執(zhí)行的程序中,線程安全的代碼會通過同步機制保證各個線程都可以正常且正確的

    2024年02月08日
    瀏覽(19)
  • 你真的會用 npx 嗎???

    Hello,大家好! 日常開發(fā)中大家應(yīng)該經(jīng)常使用 npm install xxx 來安裝包依賴,那是否注意到npm升級到 npm@5.2.0 之后,在 npm 二進制命令旁邊安裝了一個 npx 二進制文件呢? 在沒有 npx 命令之前,我們想要執(zhí)行項目中安裝的可執(zhí)行腳本,以安裝 React 創(chuàng)建項目的腳手架 create-react-app 為

    2024年02月02日
    瀏覽(15)
  • 你真的會用async和await么?

    你真的會用async和await么?

    背景就是遇到了一個比較煩人的模塊,里面的涉及到了大量的async 和 awiat。發(fā)現(xiàn)大多人對這個語法糖一知半解,然后大量的濫用,整理一下 前置知識: 1、async修飾的函數(shù)返回一個promise 2、async返回的是一個promise,當(dāng)async中發(fā)生錯誤,這個錯誤會使返回的promise變?yōu)閞eject狀態(tài),

    2024年02月16日
    瀏覽(19)
  • Java 斷言 assert 你真的會用嘛?

    Java 斷言 assert 你真的會用嘛?

    Java面試總結(jié)匯總,整理了包括Java重點知識,以及常用開源框架,歡迎大家閱讀。文章可能有錯誤的地方,因為個人知識有限,歡迎各位大佬指出!文章持續(xù)更新中...... 什么是Java Java是一門面向?qū)ο缶幊陶Z言,不僅吸收了C++語言的各種優(yōu)點,還摒棄了C++里難以理解的多繼承、

    2024年02月09日
    瀏覽(19)
  • 您真的會用百度嗎?(百度搜索技巧-超詳細)

    您真的會用百度嗎?(百度搜索技巧-超詳細)

    目錄 · intitle:×× · ×× site:限制網(wǎng)站的域名 · inurl:×× · filetype:pdf/ppt/txt/doc/xls... 匹配符: · 通配符 \\\"?\\\" · 通配符 \\\"*\\\" · 通配符 \\\"() \\\" · \\\"××\\\" · 《》 · ? + · ? - · 用法簡介 擴展 · 擴展一:index of ×× 在日常生活中我們多多少少會和百度搜索打交道,那么用了這么

    2023年04月09日
    瀏覽(20)
  • vue3中setup的兩個參數(shù) props,context (attrs,emit,slots),vue3中的雙向數(shù)據(jù)綁定自定義事件emit和v-model

    vue3中setup的兩個參數(shù) props,context (attrs,emit,slots),vue3中的雙向數(shù)據(jù)綁定自定義事件emit和v-model

    目錄 setup函數(shù) props參數(shù) 案例 第一種寫法(用setup函數(shù)的方式): ?第二種方法(語法糖形式即setup寫入script標(biāo)簽中)也可以傳值, ?context (attrs,emit,slots) vue3中的雙向數(shù)據(jù)綁定自定義事件emit和v-model emit自定義事件 v-model 有兩個參數(shù)分別是 props,context 即 props參數(shù)是一個 對象 ,

    2024年02月10日
    瀏覽(16)
  • 你真的知道TCP協(xié)議中的序列號確認(rèn)、上層協(xié)議及記錄標(biāo)識問題嗎?

    你真的知道TCP協(xié)議中的序列號確認(rèn)、上層協(xié)議及記錄標(biāo)識問題嗎?

    在前面的內(nèi)容中,我們已經(jīng)詳細講解了一系列與TCP相關(guān)的面試問題。然而,這些問題都是基于個別知識點進行擴展的。今天,我們將重點討論一些場景問題,并探討如何解決這些問題。 當(dāng)A主機與B主機建立了TCP連接后,A主機發(fā)送了兩個TCP報文,分別大小為500和300字節(jié)。第一個

    2024年01月18日
    瀏覽(19)
  • ????你真的知道TCP協(xié)議中的序列號確認(rèn)、上層協(xié)議及記錄標(biāo)識問題嗎?

    ????你真的知道TCP協(xié)議中的序列號確認(rèn)、上層協(xié)議及記錄標(biāo)識問題嗎?

    在前面的內(nèi)容中,我們已經(jīng)詳細講解了一系列與TCP相關(guān)的面試問題。然而,這些問題都是基于個別知識點進行擴展的。今天,我們將重點討論一些場景問題,并探討如何解決這些問題。 當(dāng)A主機與B主機建立了TCP連接后,A主機發(fā)送了兩個TCP報文,分別大小為500和300字節(jié)。第一個

    2024年02月05日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包