vue 父组件调用子组件方法

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

  • $emit$on 方式
    参考[子组件调用父组件方法]的第二种方法。

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

    //父组件
    <consumption-table
    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’)
    }
    }
    }

可能会出现的问题:

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

    <el-date-picker
    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();
 });
  1. 如果consumptionTable的外面是一层循环,通过ref获取的consumptionTable就是一个数组,需要通过相应的index去调用对应的getData方法。

    index

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

土豆片片

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

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

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

打赏作者

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

抵扣说明:

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

余额充值