Vue中$attrs與$listeners的使用教程
介紹
$attrs
繼承所有的父組件屬性(沒有通過 props 接收的屬性還有 class 類名 和 style 樣式 )。
inheritAttrs:
是否非 props 屬性顯示在標簽最外層,默認值 true ,就是繼承所有的父組件屬性(除了 props 特定綁定外)作為普通的HTML特性應(yīng)用在子組件的根元素上,如果你不希望組件的根元素繼承特性就設(shè)置 inheritAttrs: false? ,但是 class 還是會繼承。
$listeners
它是一個對象,能接收所有的方法綁定,里面包含了作用在這個組件上的所有監(jiān)聽器,配合 v-on="$listeners" 將所有的事件監(jiān)聽器指向這個組件的某個特定的子元素。
舉例
父組件中?
<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>
可見,當 inheritAttrs 默認 false 時,屬性是傳入到子組件最外層的

當 inheritAttrs 為 true 后

當使用props接收屬性時,屬性就不會被顯示

總結(jié):組件標簽上傳入的屬性如果子組件沒有接收會跑到子組件標簽最外層。
非 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>
當給子組件綁定點擊事件時,是不會觸發(fā)點擊事件的,可以使用 .native 修飾符進行綁定成功

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

結(jié)果

總結(jié)?
所有非props屬性都可以通過$attrs接收
使用:v-bind="$attrs" 將所有非props屬性綁定到相應(yīng)標簽,也可以用于組件
所有組件上的方法綁定子組件都可以通過$listeners接收
使用:v-on="$listeners"將所有方法又綁定到組件相應(yīng)標簽,也可以用于組件
到此這篇關(guān)于Vue中$attrs與$listeners的使用教程的文章就介紹到這了,更多相關(guān)Vue $attrs $listeners內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue2中的keep-alive使用總結(jié)及注意事項
vue2.0提供了一個keep-alive組件用來緩存組件,避免多次加載相應(yīng)的組件,減少性能消耗。本文給大家介紹vue2中的keep-alive使用總結(jié)及注意事項,需要的朋友參考下吧2017-12-12
Vue-Cli配置代理轉(zhuǎn)發(fā)解決跨域問題的方法
本文主要介紹了Vue-Cli配置代理轉(zhuǎn)發(fā)解決跨域問題的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
vue+element 模態(tài)框表格形式的可編輯表單實現(xiàn)
這篇文章主要介紹了vue+element 模態(tài)框表格形式的可編輯表單實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-06-06
vue中為什么在組件內(nèi)部data是一個函數(shù)而不是一個對象
這篇文章主要介紹了vue中為什么在組件內(nèi)部data是一個函數(shù)而不是一個對象,本文通過示例代碼給大家講解的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04

