Vue3 屬性透?jìng)?$attrs 與 插槽透?jìng)?$slots

當(dāng)我們要復(fù)寫各類 UI 組件的時(shí)候,為了保證UI組件的參數(shù)與插槽都能使用,且不用重復(fù)定義,我們可以通過屬性透?jìng)?/code>與插槽透?jìng)?/code>來實(shí)現(xiàn)

vue $slots 傳送門

vue $attrs 傳送門

屬性透?jìng)?$attrs

$attrs 一個(gè)包含了組件所有透?jìng)?attribute 的對(duì)象(不包含已定義的 props)。

透?jìng)?Attribute 是一些由父組件傳入的 attribute事件處理器,且沒有在此子組件中聲明為一個(gè) prop要拋出的事件。

默認(rèn)情況下,若是單一根節(jié)點(diǎn)組件,$attrs 中的所有 property 都是直接自動(dòng)繼承自組件的根元素。而多根節(jié)點(diǎn)組件則不會(huì)如此,同時(shí)你也可以通過配置 inheritAttrs 選項(xiàng)來顯式地關(guān)閉該行為。

實(shí)現(xiàn)屬性透?jìng)?/h4>
// 自定義的 MyButton
<el-button v-bind="$attrs"></el-button>
// 其他組件調(diào)用
<MyButton type="primary">按鈕<MyButton>
/**
 * type="primary" 將會(huì)通過 v-bind="$attrs" 透?jìng)鹘o el-button 組件
 */

插槽透?jìng)?$slots

$slots 一個(gè)表示父組件所傳入插槽的對(duì)象。

通常用于手寫渲染函數(shù),但也可用于檢測(cè)是否存在插槽。

每一個(gè)插槽都在 this.$slots 上暴露為一個(gè)函數(shù),返回一個(gè) vnode 數(shù)組,同時(shí) key 名對(duì)應(yīng)著插槽名。默認(rèn)插槽暴露為 this.$slots.default。

如果插槽是一個(gè)作用域插槽,傳遞給該插槽函數(shù)的參數(shù)可以作為插槽的 prop 提供給插槽。

實(shí)現(xiàn)插槽透?jìng)?/h3>
// 自定義組件 MyButton
<el-button v-bind="$attrs">
  <!-- 通過便利實(shí)現(xiàn)插槽透?jìng)?-->
  <template v-for="(item, key, index) in $slots" :key="index" v-slot:[key]>
    <slot :name="key"></slot>
  </template>
</el-button>
// 其他組件調(diào)用
<MyButton type="primary">
  <el-icon><Back /></el-icon>
<MyButton>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容