Vue $on能拿到数据但是无法更新data数据?

组件A

data () {
    return {
        Adata:[...]
    }
},
methods: {
    send () {
        bus.$emit('Bsend', this.Adata)
    }
}

组件B

data () {
    return {
        Bdata:[]
    }
},
methods: {
    send () {
        var _this = this
        bus.$on('Bsend', function (data) {
            console.log(data)       //  可以拿到数据信息
            _this.Bdata = data
            console.log(_this.Bdata)  // 也可以拿到数据信息
        })
        console.log(this.Bdata)   // 为空
    }
}

大体就是这样,不知道是我用法有问题还是怎么,求大佬指教!!

阅读 6.2k
7 个回答

你需要弄明白js异步回调的执行顺序,最后一行输出在接收到监听事件之前就执行了

新手上路,请多包涵

请问解决了吗?我也遇到了一样的问题

把回调函数,改写成箭头函数的写法试试

没懂,console.log(this.Bdata)为空没啥问题啊

$on 相当于定义Bsend一个方法
$emit 触发方法
可以理解为

var str;
function Bsend(id){
    str = id;
    console.log(str)
}
console.log(str);//输出时还没触发
Bsend(3)
新手上路,请多包涵

改成console.log(_this.Bdata)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题