У меня есть этот шаблон с именем Report.vue
, и в этом шаблоне у меня также есть свойство data()
с именем dataSent:[]
. В указанном шаблоне я вызываю компонент BarChart
, которому я пытаюсь передать массив dataSent
с обновленными элементами, такими как dataSent[1,2,3,4,5...]
, компоненту (BarChart), чтобы он мог отображать графики. Однако, когда я добавляю console.log в BarChart, он никогда не получает обновленные реквизиты. Я подозреваю, что это как-то связано с событиями, но поскольку я новичок и до сих пор не совсем понял, как это работает, мне было интересно, могу ли я получить некоторую помощь
Поскольку dataSent: [] инициализируется пустым массивом, имеет смысл, что компонент BarChart ничего не показывает с самого начала, но затем я создал метод (в разделе методов), названный updateData (), который явно заполняет dataSent [12, 19, 3, 5, 2,8]. И, конечно же, я использую привязку props к компоненту Barchart (он называется data), который привязан к массиву 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]
watch
наdata
опору вBarChart
? Предоставленный вами код не регистрирует новое значение дляdata
prop, потому что он вызывает толькоdisplayChart
вmounted
. Хукmounted
будет вызываться только один раз при первом рендеринге компонента.watch: { data () { console.log(this.data) } }
- person skirtle   schedule 01.08.2019