Vue.js 在其他组件中侦听后,无法识别通过发射的Vue对象

Vue.js 在其他组件中侦听后,无法识别通过发射的Vue对象,vue.js,vuejs2,Vue.js,Vuejs2,我有两个组件,即组件A和组件B。 在componentA中,我有一个单击事件,该事件触发一个方法,该方法将用户对象作为参数传递,然后使用事件总线发出该对象。当我成功侦听emit in组件B时,我已将发出的对象分配给变量,I console.log out该变量显示该对象,但当I console.log再次将变量记录在事件之外时。$一旦该对象消失。 任何帮助都将不胜感激:) 谢谢 这是我的密码: 成分a showUserStats(user) { EventBus.$emit('userI

我有两个组件,即组件A和组件B。 在componentA中,我有一个单击事件,该事件触发一个方法,该方法将用户对象作为参数传递,然后使用事件总线发出该对象。当我成功侦听emit in组件B时,我已将发出的对象分配给变量,I console.log out该变量显示该对象,但当I console.log再次将变量记录在事件之外时。$一旦该对象消失。 任何帮助都将不胜感激:) 谢谢

这是我的密码:

成分a

showUserStats(user) {
    EventBus.$emit('userInfo', user);
    this.$router.push({
      name: 'componentB',
      params: { id: user._id }
    })
  }
成分B

created() {
      EventBus.$once('userInfo', (user) => {
        this.userInfo = user
        console.log('userInfo', this.userInfo);
      });
      console.log('userInfo outside EventBus', this.userInfo);
    }

发生这种情况是因为您正在控制台上登录创建的
生命周期事件。组件创建时(未分配用户信息时),
$once
调用外部的console.log将立即调用,但
$once
内部的console.log仅在发出事件并依次分配变量/数据时才会发生

与评论一致:你不能只是在延迟中加入延迟,并期望它工作,因为它是基于事件触发的。您没有告诉我们何时调用
showUserStats
的信息,因此我不知道此事件何时发出

关于计算值,这应该起作用,因为它将在分配用户信息时更新,但如果不是这样,则需要添加检查,如下所示:

computed: {
  fullName () {
    return this.userInfo ? this.userInfo.name + ' ' + this.userInfo.surname : ''
  }
}

除非已分配用户信息对象,否则它将显示为空白(注意:您可能需要根据在数据()中初始化
userInfo
var的方式更改检查)

谢谢您的帮助,但我尝试了1秒的延迟,但仍然没有成功:(我想在我的计算方法中使用该变量。computed:{fullName(){return this.userInfo.name+''+this.userInfo.lasname;}}奇怪的是,当我调用API检索用户信息时,它可以正常工作。据我所知,每次单击鼠标右键时,您都试图触发事件?如果是,那么您应该使用$on而不是$once