编程
$listener 与 vue 自定义事件的联系
$listener 与 vue 自定义事件的联系 $listener 是什么 包含了组件的所有的监听器,为了实现事件回传 事件回传 组件关系,父-子-孙 孙组件点击,不用$emit(不用子组件使用自定义事件监听孙组件),实现父组件直接获取孙组件传的参数 结果,点击孙组件后,打印了 from grandson <!-- ... --> <script src="https://cdn.js…
$listener 与 vue 自定义事件的联系 $listener 是什么 包含了组件的所有的监听器,为了实现事件回传 事件回传 组件关系,父-子-孙 孙组件点击,不用$emit(不用子组件使用自定义事件监听孙组件),实现父组件直接获取孙组件传的参数 结果,点击孙组件后,打印了 from grandson <!-- ... --> <script src="https://cdn.js…
包含了组件的所有的监听器,为了实现事件回传
- 组件关系,父-子-孙
- 孙组件点击,不用$emit(不用子组件使用自定义事件监听孙组件),实现父组件直接获取孙组件传的参数
- 结果,点击孙组件后,打印了
from grandson
<!-- ... -->
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<body>
<div id="app">
<Children></Children>
</div>
<script>
// 孙组件
var Grandson = {
template: `<span @click="transfer">这个点击是为了传给爷爷组件,父组件不做任何监听</span>`,
methods: {
transfer() {
console.log(this.$listeners);
this.$listeners.tofather("from grandson");
}
}
};
// 子组件
var Children = {
components: {
Grandson
},
template: `
<div>
子组件:
<Grandson v-on="$listeners" @name="name123"></Grandson>
</div>
`,
methods: {}
};
// 父组件
var app = new Vue({
el: "#app",
components: {
Children
},
methods: {
get(data) {
console.log(data);
}
}
});
</script>
</body>
- $listener 本质是一个收集了父组件(本例中的父或子)所有自定义事件的集合
- 自定义事件的本质:子组件收集父组件传入的 listener,也就是自定义事件的函数名,拿到这个回调,在$emit 的时候执行这个函数,期间可以传参,本质是在子组件监听这个事件,而不是父组件
- $listener 就是那个收集了所有回调的收集器,收集器收集了父或子组件的回调,那么孙组件的点击,就执行这个回调,进而就触发了那个函数,看起来好像是父或子监听,实际是因为孙提前收集了,在点击时候执行,并且可以传相应的参数
- 之前以源码角度分析了vue 的 DOM 事件和自定义事件
暂无评论
确认操作
请再次确认编辑图片
待上传图片 (剩余 0 张)
项目详情
确认评论邮箱
邀请制评论