Vue中$attrs與$listeners的使用教程
介紹
$attrs
繼承所有的父組件屬性(沒有通過 props 接收的屬性還有 class 類名 和 style 樣式 )。
inheritAttrs:
是否非 props 屬性顯示在標(biāo)簽最外層,默認(rèn)值 true ,就是繼承所有的父組件屬性(除了 props 特定綁定外)作為普通的HTML特性應(yīng)用在子組件的根元素上,如果你不希望組件的根元素繼承特性就設(shè)置 inheritAttrs: false? ,但是 class 還是會(huì)繼承。
$listeners
它是一個(gè)對(duì)象,能接收所有的方法綁定,里面包含了作用在這個(gè)組件上的所有監(jiān)聽器,配合 v-on="$listeners" 將所有的事件監(jiān)聽器指向這個(gè)組件的某個(gè)特定的子元素。
舉例
父組件中?
<template>
<div id="app">
<Son src="https://img01.yzcdn.cn/vant/logo.png"></Son>
</div>
</template>
<script>
import Son from "./components/son.vue";
export default {
name: "App",
components: {
Son,
},
};
</script>
<style></style>
子組件中
<template>
<div id="app">
<Son src="https://img01.yzcdn.cn/vant/logo.png"></Son>
</div>
</template>
<script>
import Son from "./components/son.vue";
export default {
name: "App",
components: {
Son,
},
};
</script>
<style></style>
可見,當(dāng) inheritAttrs 默認(rèn) false 時(shí),屬性是傳入到子組件最外層的

當(dāng) inheritAttrs 為 true 后

當(dāng)使用props接收屬性時(shí),屬性就不會(huì)被顯示

總結(jié):組件標(biāo)簽上傳入的屬性如果子組件沒有接收會(huì)跑到子組件標(biāo)簽最外層。
非 props 屬性可以通過 $attrs 接收 {屬性名:屬性值}
<template>
<div>
<img v-bind="$attrs" alt="" />
</div>
</template>
<script>
export default {
inheritAttrs: false,
};
</script>
<style scoped>
.img {
width: 100px;
height: 100px;
}
</style>
當(dāng)給子組件綁定點(diǎn)擊事件時(shí),是不會(huì)觸發(fā)點(diǎn)擊事件的,可以使用 .native 修飾符進(jìn)行綁定成功

或者通過 $listeners 進(jìn)行接收所有方法的綁定
子組件內(nèi)

結(jié)果

總結(jié)?
所有非props屬性都可以通過$attrs接收
使用:v-bind="$attrs" 將所有非props屬性綁定到相應(yīng)標(biāo)簽,也可以用于組件
所有組件上的方法綁定子組件都可以通過$listeners接收
使用:v-on="$listeners"將所有方法又綁定到組件相應(yīng)標(biāo)簽,也可以用于組件
到此這篇關(guān)于Vue中$attrs與$listeners的使用教程的文章就介紹到這了,更多相關(guān)Vue $attrs $listeners內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue3一個(gè)元素如何綁定兩個(gè)或多個(gè)事件
這篇文章主要介紹了vue3一個(gè)元素如何綁定兩個(gè)或多個(gè)事件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
uniapp+vue3實(shí)現(xiàn)上傳圖片組件封裝功能
這篇文章主要介紹了uniapp+vue3實(shí)現(xiàn)上傳圖片組件封裝功能,首先創(chuàng)建一個(gè)?components 文件在里面進(jìn)行組件的創(chuàng)建,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07
vue2中的keep-alive使用總結(jié)及注意事項(xiàng)
vue2.0提供了一個(gè)keep-alive組件用來緩存組件,避免多次加載相應(yīng)的組件,減少性能消耗。本文給大家介紹vue2中的keep-alive使用總結(jié)及注意事項(xiàng),需要的朋友參考下吧2017-12-12
Vue-Cli配置代理轉(zhuǎn)發(fā)解決跨域問題的方法
本文主要介紹了Vue-Cli配置代理轉(zhuǎn)發(fā)解決跨域問題的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
富文本編輯器vue2-editor實(shí)現(xiàn)全屏功能
這篇文章主要介紹了富文本編輯器vue2-editor實(shí)現(xiàn)全屏功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-05-05
vue+element 模態(tài)框表格形式的可編輯表單實(shí)現(xiàn)
這篇文章主要介紹了vue+element 模態(tài)框表格形式的可編輯表單實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-06-06
vue中為什么在組件內(nèi)部data是一個(gè)函數(shù)而不是一個(gè)對(duì)象
這篇文章主要介紹了vue中為什么在組件內(nèi)部data是一個(gè)函數(shù)而不是一個(gè)對(duì)象,本文通過示例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
解決vue3項(xiàng)目中el-menu不兼容SSR問題
這篇文章主要介紹了解決vue3項(xiàng)目中el-menu不兼容SSR問題,需要的朋友可以參考下2023-12-12

