$attrs 与 $listeners

303 阅读1分钟

$attrs

    包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (classstyle 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (classstyle 除外),并且可以通过 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>