vue3使用事件主线实现非父子页面之间的通信

虽然还是用emit on,但是不同于vue2的写法

在vue3中,要npm i mitt

然后,新建一个js文件mitt.js

import mitt from 'mitt'
const bus = mitt()
export default mitt

在要使用的页面中import bus from './mitt.js'

如果不想这么麻烦在每个文件中都要import mitt,可以在main.js中全局引入,然后挂载到原型上,就可以通过this.的方式去使用

main.js

import bus from 'mitt'
const bus = mitt()
app.config.globalProperties.$bus = bus

使用事件主线的a.vue,emit是触发某个事件,如果要传值,就把第二个参数写成要传的值

<template>
	<el-dropdown-menu>
       <el-dropdown-item @click="$bus.emit('toggle')">全屏</el-dropdown-item>
       <!-- 组件上面写原生事件,要加native修饰符 -->
       <el-dropdown-item @click="quit">退出</el-dropdown-item>
    </el-dropdown-menu>
</template>

使用事件主线的b.vue,on是监听某个方法,只要这个方法一被emit触发,on监听到后就会执行回调函数里面的内容

<script>
export default {
	mounted() {
    // 监听一下toggle事件,当被触发时,执行回调函数
    this.$bus.on('toggle', () => {
      this.$refs['fullscreen'].toggle()
    })
  }
}
</script>

这样之后,a.vue就可以给b.vue传值,或者调用b.vue里面的方法了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值