Vue.js父级不向子级发送更新的数据

时间:2019-03-18 07:24:57

标签: javascript vue.js parent-child pull-to-refresh

我无法从父级更新子级中的数据。父级仅发送初始数据,但是如果我按功能更新数据,则可以从后端获取数据,而不会发生任何变化。我什至做了wacher,它可以工作,然后更改数据(在控制台中写调试字),但仍然不发送更新的数据。我应该如何使用动态更改的数据从父数据刷新子级?

父母:

<el-date-picker
    v-model="reportMonth"
    type="month"
    format="MMMM yyyy"
    value-format="yyyy-MM-dd"
    placeholder="Choose month"
    @change="generateReport">
  </el-date-picker>

<bar-chart :parent-data="sendData"></bar-chart>

data() {
    return {
      monthData: null,
      sendData: {
        lowRiskPreliminary: 0,
        midRiskPreliminary: 0,
        highRiskPreliminary: 0,
        inadmissibleRiskPreliminary: 0,
        notValidPreliminary: 0
      }


watch: {
    monthData: function() {
      console.log('data changed!')
      this.sendData = this.monthData
    }
  },
  methods: {
    generateReport() {
      this.listLoading = true
      getMonthlyReport(this.reportMonth).then(response => {
        this.monthData = response.data }

孩子:

<template>
  <div :class="className" :style="{height:height,width:width}"></div>
</template>

export default {
  props: {
    className: {
      type: String,
      default: 'chart'
    },
    width: {
      type: String,
      default: '100%'
    },
    height: {
      type: String,
      default: '300px'
    },
    parentData: {
      type: Object,
      default: undefined
    }
  },
  data() {
    return {
      chart: null,
      lowRisk: [this.parentData.lowRiskPreliminary],
      midRisk: [this.parentData.midRiskPreliminary],
      highRisk: [this.parentData.highRiskPreliminary],
      inhRish: [this.parentData.inadmissibleRiskPreliminary],
      notVal: [this.parentData.notValidPreliminary]
    }
  },
  mounted() {
    this.initChart()

methods: {
    initChart() {
      this.chart = echarts.init(this.$el)
      this.chart.setOption({

2 个答案:

答案 0 :(得分:1)

您具有默认值mod_mymods.f90作为parentData的默认值,并且在更新父变量后将其更改为object。进一步了解VueJS和注意事项中的反应性: https://vuejs.org/v2/guide/reactivity.html

使用undefined

$nextTick

或使用$ emit从父对象发出事件:

watch: {
     monthData: function() {
       this.$nextTick(function () {
           this.sendData = this.monthData
       })
    }
}

和孩子:

watch: {
    monthData: function() {

           this.$emit('monthDataUpdated', this.monthData);
    }
}

答案 1 :(得分:0)

在{{sendData}}这样的子模板中打印sendData,您应该看到它已更改。