随身笔记
随身笔记

$listeners

$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) )  //监听所有

 

 

 

 

随身笔记

$listeners
$listeners方便隔代传值,用于底层组件向高级层组件传递信息。 例如有 父组件A,子组件B,孙组件C 三个组件,如果C传递信息给B则可直接使用$emit,如果是C向A传递信息还使用$emit,则就…
扫描二维码继续阅读
2024-02-29