簡體   English   中英

Vue.js 父級不向子級發送更新的數據

[英]Vue.js parent don't send updated data to child

我無法從父母更新孩子的數據。 Parent 只發送初始數據,但如果我按函數更新數據,那么我從后端獲取它,沒有任何改變。 我什至做了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({

您將原始值undefined為 parentData 的默認值,並在更新父變量后將其更改為對象。 查看更多關於 VueJS 的反應性和注意事項: https ://v2.vuejs.org/v2/guide/reactivity.html

使用$nextTick

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

或使用 $emit,從父級發出事件:

watch: {
    monthData: function() {
   
           this.$emit('monthDataUpdated', this.monthData);
    }
}

在孩子身上:

events: {
   'monthDataUpdated' : function(data){
     this.$nextTick(function () {
       this.parentData = data;
     });
   },
}

像這樣 {{ sendData }} 在子模板中打印 sendData ,您應該會看到它發生了變化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM