Vue:父组件通过prop向子组件的传参发生了变化,而子组件的没有接收到新值?增加监听,问题解决。

基本展示:

父页面使用子组件如下:

<child-vue v-if="childShow" ref="childIndex" :father-id="fatherId" ></child-vue>

其中,fatherId为向子页面传的参数。

子页面接收参数如下:

props: ['fatherId'],

子页面使用该参数调用方法(注,使用方式不同,发生的问题不同)

getMore() {
    console.info(this.fatherId)
},

需求:

当fatherId发生变化时,需要同步更新子页面的fatherId,并使子页面的方法能用正确的参数执行。

问题:

当fatherId发生变化时,子页面的fatherId并未更新。

解决方案:

方案一:

子页面不做更改,父页面增加key属性::key=“参数名”。

<child-vue v-if="childShow" ref="childIndex" :father-id="fatherId" :key="fatherId"></child-vue>

方案二:

父页面不做更改,子页面增加监听事件。

watch: {
    //监听props里父页面传的参数的变化
    fatherId(val) {
        this.fatherId()
    }
},

方案三:

父页面调用子页面方法,修改属性。

父页面代码:

getChildMethod(fatherId) {
    //参数赋值
    this.fatherId= fatherId;
    const _this = this
    //使用nextTick延迟回调
    _this.$nextTick(() => {
        _this.$refs.childIndex.getMore() // 调用子页面方法
   })
},

说明:“childIndex”为父页面中ref的定义名,“getMore”为子页面的方法名

知识点补充:

1,$refs,用于父组件中访问子组件内部的变量或方法。通过$refs,我们可以获取到子组件的实例,并调用它的方法或修改它的属性。

2,this.$nextTick(),用于延迟回调,主要是用在随数据改变而改变的dom应用场景中,vue中数据和dom渲染由于是异步的,所以,要让dom结构随数据改变这样的操作都应该放进this.$nextTick()的回调函数中。

踩坑记录:

1,调用子页面方法时,括号里传了个参数,直接修改了子页面props里的值,导致浏览器报错。错误示范:

getChildMethod(fatherId) {
        this.$refs.childIndex.getMore(fatherId) // 
   },

浏览器报错:

2,调用子页面方法时,没有使用this.$nextTick()延迟回调。导致数据每次点击都先保留一次上次的传参值。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的提提

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值