vue 父组件传动态数据给子组件问题

本文讨论了在Vue开发中如何将后端动态获取的数据传递给子组件,并处理子组件无法及时更新数据的问题。通过在子组件中监听父组件传递的data变化,可以确保在数据更新时重新初始化图表。此案例适用于需要实时响应父组件数据变化的场景。
摘要由CSDN通过智能技术生成

在开发中,有时会遇到 将一个从后端动态获取的数据传到子组件去操作的需求。

例如:

父组件

<div class="chart-wrapper">
    <pie-chart :title="title1" :data="attendanceData"/>
</div>
getAttendance() {
    getAttendance(this.query).then(response => {
        this.attendanceData = response.data;
    });
}

在父组件会随着点击不同的按钮等,设置不同的query,多次触发getAttendance(),数据attendanceData跟着多次改变。

子组件

props: {
    title: {
      type: String,
      default: 'Pipe'
    },
    data: {
      type: Array,
      default: () => [
        { value: 320, name: 'Industries' },
        { value: 240, name: 'Technology' },
        { value: 149, name: 'Forex' },
        { value: 100, name: 'Gold' },
        { value: 59, name: 'Forecasts' }
      ]
    }
},
methods: {
    initChart() {
        console.log(this.data);
    }
}

这时,随着父组件点击不同的按钮,传递不同的data到子组件,这种情况下,你会发现方法initChart中是取不到父组件传过来的data的,或者取到的一直是默认值。

我们可以在子组件监听data的变化

data() {
  return {
    newData: []
  }
},
watch : {
   'data': function(newVal,oldVal) {
       this.newData = newVal;
       this.initChart();
    }
},
methods: {
    initChart() {
        console.log(this.data);
    }
}

如果父组件传的是个固定不变的值,如title1,子组件就不需要监听。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值