vue 非父子组件传值 事件总线 $on $emit 新手踩过的坑及解决方法

vue 非父子组件传值 事件总线 $on $emit 新手踩过的坑及解决方法

vue 非父子组件传值 事件总线 $on $emit 新手踩过的坑及解决方法

基本语句

Vue.prototype.bus = new Vue()// 在 Vue 的prototype挂载了一个bus属性
//触发事件 传值
this.bus.$emit('change', this.name)// 通过$emit向外层触发事件并传递参数;第一个参数是事件名字随便起但需跟$on中的事件名字一样
// 监听事件 接收值
 this.bus.$on('change', (data) => {
      this.name = data
      console.log('$on传的值', this.name)
    })

写在哪里?

Vue.prototype.bus = new Vue()// 在 Vue 的prototype挂载了一个bus属性

写在main.js入口文件中 作为全局的vue能够被所有组件引用
$emit 写在传送值的组件A中
$on 写在接受值的组件B中

踩过的坑

1、$on接收不到值

注意vue组件的生命周期
通过查询资料得知原来 vue路由切换时,会先加载新的组件,等新的组件渲染好但是还没有挂载前,销毁旧的组件,之后挂载新组件,如下图所示:

新组件beforeCreate
        ↓
新组件created
        ↓
新组件beforeMount
        ↓
旧组件beforeDestroy
        ↓
旧组件destroyed
        ↓
新组件mounted

所以监听不到的原因可能是 e m i t 触 发 时 emit触发时 emit on还未监听
从而应该

// A组件
 beforeDestroy () {
  this.bus.$emit('change', this.name)
  }
  // B 组件
  created(){
   this.bus.$on('change', (data) => {
      this.name = data
      console.log('$on传的值', this.name)
    })
  }

2、$ on收到值了,但数据不更新

将function(data) 改成 (data)=>
因为this 的指向不对

 this.bus.$on('change', function(data) {
      this.name = data
      console.log('$on传的值', this.name)

 this.bus.$on('change', (data) => {
      this.name = data
      console.log('$on传的值', this.name)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值