VUE不同页面间通过Bus传递的值无法渲染到页面

VUE中兄弟组件之间通信会出现接受组件无法渲染到页面的情况,就是两个完全不相关的路由页面,使用eventBus也是可以拿到相应的数据,在created中接收但是死活就是没法渲染到页面上,是因为生命周期的问题:
最先开始以为是页面刷新,将数据也刷新了,没有传递过来。然后用了keep-alive,结果然并卵。只能百度,了解到与组件的生命周期有关。

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

原因没捋清,知道的大佬交流一下。

解决方法: 发射数据页面,在destroyed或者beforeDestroy再调用一遍传输数据的方法方法。

我的业务情形是通过点击事件传输数据,贴上我的代码。

<van-cell 
title="姓名" 
:value="profileObj.name" 
is-link 
@click="changeName" 
to="/editname" 
/>
import bus from '@/components/eventBus'
methods: {
    // async onFileChange(e) {
    //   if (e.target.files.length === 0) return // 没有选择图片直接return
    //   // 创建formdata
    //   const theFd = new FormData()
    //   theFd.append('photo', e.target.files[0]) //

    //   const res = await updateUserPhotoAPI(theFd)
    //   console.log(res)
    //   this.profileObj.photo = res.data.data.photo
    // },
    // imageClickFn() {
    //   this.$refs.iptFile.click()
    // },
    changeName() {
      bus.$emit('sendMyName', this.profileObj)
    }
  },
  beforeDestroy() {
    this.changeName()
  },

 接收页面正常在created周期使用就可以。

 <div class="prompt">
      <p>昵称长度限制2~24个字符内</p>
      <van-cell-group>
        <van-field 
        v-model="userName.name" 
        clearable 
        v-fofo 
        placeholder="你随便改,我都无所谓。" />
      </van-cell-group>
 </div>
export default {
  data() {
    return {
      userName: {}
    }
  },
  created() {
    bus.$on('sendMyName', data => {
      this.userName = data
    })
  },
  methods: {}
}

这样取到的值就可以实时显示了.

总结一下: 接收页面都无所谓, 大多都是在creatd中去接收数据, 就是发射的时候需要在生命周期destroyed/beforeDestroy再去调用一下发射事件

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值