Vue组件间传值

本文探讨了在Vue项目中,A页面通过$route打开B页面并传递id参数,然后B页面将参数传递给子组件C时遇到的问题。当B页面的变量X未及时更新时,子组件C接收到的是初始值。解决方案是在B页面的created钩子中进行赋值操作,确保B先赋值再传递给C。此外,还提出了直接通过参数透传的另一种解决思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

项目上,前端使用了 Vuejs 框架和ElementUI控件库

  1. A页面通过 $route 打开B页面,同时传入参数 id;
  2. B页面将参数读取并保存于变量X;
  3. B页面有子组件C,将变量X传给C

现状

parent.vue (B页面)

<template>
    <child :id="X"></child>
</template>
<script>
import child from 'child.vue'
export default {
    name: 'parent',
    data () {
        return {
            X: 'init'
        }
    },
    mounted: function () {
        this.id = this.$route.query.id
    }
}
</script>

child.vue (子组件C)

<template>
</template>
<script>
export default {
    props: ['id'],
    name: 'child',
    data () {
        return {
        }
    }
    mounted: function () {
        console.log(this.id)
    }
}
</script>

问题

子组件C输出的值是'init',也就是parent.vue的X变量的初始值。

思路

由于B和C是一同加载的,所以两者的mounted执行顺序并不是固定为 B -> C。这就产生了这个问题:B未将传入的参数赋值给变量X,变量X的值已经传给了C。

后续看到了VUE官网上关于vue实例的生命周期图:
Vue实例的生命周期

解决思路:B和C的加载顺序固定,那么B就先进行了赋值,而后再传值给C

解决

B的赋值操作,在created里进行

// 原 mounted
    created: function () {
        this.id = this.$route.query.id
    }

后记

想到了另一个解决方法:直接将参数透传

parent.vue

<template>
    <child :id="this.$route.query.id"></child>
</template>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值