$attrs
包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class
和 style
除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class
和 style
除外),并且可以通过 v-bind="$attrs"
传入内部组件(父传孙)。
$listener
包含了父作用域中的 (不含 .native
修饰器的) v-on
事件监听器。它可以通过 v-on="$listeners"
传入内部组件(孙传父)。
父组件:
<template>
<div>
<Test1 :a="111" :b="list" c="333c" @close="handleClick"></Test1>
</div>
</template>
<script>
import Test1 from "./test1.vue";
export default {
components: { Test1 },
data() {
return {
list: [
{
name:"张三",
value: 11
}
]
}
},
methods: {
handleClick() {
console.log(123)
}
}
}
</script>
子组件:
<template>
<div>
<p>test1 $attrs: {{ $attrs}}</p>
<Test2 v-bind="$attrs" v-on="$listeners"></Test2>
</div>
</template>
<script>
import Test2 from "./test2.vue"
export default {
components: { Test2 }
}
</script>
孙组件:
<template>
<div @click="$emit('close')">test2 attrs: {{ $attrs }}</div>
</template>