Дочерний компонент не получает реквизиты от родителя после обновления данных в родительском
У меня этот шаблон называется Report.vue
и в этом шаблоне у меня также есть data()
свойство называется dataSent:[]
, В указанном шаблоне я называю компонент BarChart
, которому я пытаюсь передать dataSent
массив с обновленными элементами, такими как dataSent[1,2,3,4,5...]
к компоненту (BarChart), чтобы он мог отображать графики. Однако когда я добавляю console.log в BarChart, он никогда не получает обновленные реквизиты. Я подозреваю, что это как-то связано с событиями, но, поскольку я новичок и до сих пор не до конца понял, как это работает, мне было интересно, могу ли я получить некоторую помощь
Поскольку dataSent:[] инициализируется в пустой массив, имеет смысл, что компонент BarChart ничего не показывает с самого начала, но затем я создал метод (в разделе методов), называемый updateData(), который явно заполняет данные отправленные с [12, 19, 3, 5, 2,8]. И, конечно же, я использую реквизиты привязки к компоненту Barchart (этот называется данными), который связан с dataSent
массив. Наконец, в разделе HTML, @input
Событие в компоненте, называемом GPSelect, - это то, что должно вызывать изменение (обновление массива dataSent), однако, как уже упоминалось, действительно происходит в родительском (Report.vue), но не в дочернем компоненте (BarChart).
Report.vue
<v-flex lg4 sm12 xs12>
<div class="selectOptions">
<GPSelect
@input="listSessions"
v-model="programSelected"
:items="programs"
label="Programs"
:disabled="programs === undefined || programs.length === 0"
/>
</div>
</v-flex>
<BarChart
:label="label"
:data="dataSent"
:labels="labels"
/>
data() {
return {
treatments: [],
programs: [],
programSelected: "",
dataSent: [],
label: "Number of sessions",
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange']
}
},
methods: {
async listSessions() {
/*...some other sentences irrelevant */
this.updateData();
},
updateData() {
this.dataSent=[12, 19, 3, 5, 2,8];
return this.dataSent;
},
BarChart.vue
<template>
<div class="chart-container">
<canvas id="barChart" ref="barChart">
</canvas>
</div>
</template>
<script>
import Chart from "chart.js";
export default {
props: {
labels: Array,
colors: Array,
data: Array,
label: ""
},
mounted() {
this.displayChart();
},
methods: {
displayChart() {
console.log(this.data);
}
}
Я ожидаю, что console.log от Barchart будет отображать обновленный массив (this.data
получил) отправил из родительского компонента Report.vue, но в данный момент он показывает [__ob__: Observer]
1 ответ
BarChart.vue
<template>
<div class="chart-container">
<canvas id="barChart" ref="barChart" />
</div>
</template>
<script>
import Chart from "chart.js";
export default {
props: {
labels: Array,
colors: Array,
data: Array,
label: ""
},
mounted() {
this.displayChart();
},
watch: {
'data': 'displayChart'
},
methods: {
displayChart() {
console.log(this.data);
}
}
}
Попробуй это:))