$listeners方便隔代传值,用于底层组件向高级层组件传递信息。
例如有 父组件A,子组件B,孙组件C 三个组件,如果C传递信息给B则可直接使用$emit,如果是C向A传递信息还使用$emit,则就需要C先$emit给B,B再$emit给A,这种方式比较繁琐,则此时可以使用v-on=”$listeners”来满足当前需求。
C组件
<template> <div @click="onClick">C组件</div> </template> onClick(){ this.$emit("Msg",'123') }
B组件
<template> <cCom v-on="$listeners"/> </template>
A组件
<template> <bCom @Msg='Msg'/> </template> methods:{ Msg(val){ console.log(val) //123 } }
隔代传值这里还是推荐使用,evenbus
Vue2参考,https://sdeno.com/?p=6302 ,里面搜索bus
vue3,
npm i mitt -S 修改/src/main.js import mitt from 'mitt' app.config.globalProperties.$bus = mitt() 发送数据 methods:{ test(){ this.$bus.emit('sendvalue',{a:1}) } } 接收数据 mounted() { this.$bus.on('sendvalue',(res)=>{ console.log(res) //{a:1} }) } beforeUnmount() { this.$bus.all.delete("sendvalue") //防止多次触发on事件 }, this.$bus.on('*', (type, e) => console.log(type, e) ) //监听所有