vue 调用子组件方法失败_vue 父组件调用子组件方法

本文总结了Vue中父子组件间通信的方法,重点讨论了如何通过$emit和ref来调用子组件的方法。在实际项目中,当父组件需要触发子组件的某个方法时,可以使用这两种方式。同时,文章指出在父组件改变属性并立即调用子组件方法可能导致数据未更新的问题,并提供了使用$nextTick解决此类问题的示例。
摘要由CSDN通过智能技术生成

最近项目中用到的父子组件间的调用挺频繁的,整理下,方便以后查找。

$emit、$on 方式

参考子组件调用父组件方法的第二种方法。

通过ref直接调用子组件方法

//父组件

ref="consumptionTable"

:billDate="billDate"

>

this.$refs.consumptionTable.getData();

//子组件

props: {

billDate: {

type: String,

default: new Date().toLocaleDateString().substr(0, 7).replace("/", "-"),

}

},

methods: {

async getData() {

const res = await this.$API(url, {

month: this.billDate

});

if (res.code === 10000) {

console.log('success')

}

}

}

可能会出现的问题:

如果父组件中改变了billDate,又调用了子组件的getData方法时,比如:

v-model="billDate"

type="month"

:style="'width:189px'"

placeholder="选择日期"

value-format="yyyy-MM"

@change="changeDate"

>

changeDate(date) {

this.$refs.consumptionTable.getData();

}

子组件发送请求时会出现billDate没有更新的情况。

查了下官网,可以使用nextTick:在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,可以获取更新后的 DOM。

更详细的介绍:异步更新队列。

so,changeDate里这样写就好了:

this.$nextTick(() => {

this.$refs.consumptionTable.getData();

});

如果consumptionTable的外面是一层循环,通过ref获取的consumptionTable就是一个数组,需要通过相应的index去调用对应的getData方法。

index

this.$refs.consumptionTable[0].getData();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值