Я довольно новичок в VueJS 2, поэтому хотел посмотреть, правильно ли я работаю.У меня есть система, где кто-то загружает файл, содержащий данные, которые затем будут использоваться для создания диаграмм.Поэтому я отображаю загруженные файлы для них
<tr v-for="file in files.data" :key="file.id">
//file information
<td>
<router-link :to="{ name: file.chart, params: { fileName: file.name }}"
tag="a" exact> View Results
</router-link>
</td>
</tr>
Итак, вы можете видеть, что у меня есть ссылка в таблице, которая направляет их на страницу диаграммы для файла, который они загрузили.Он включает параметры для имени файла, который нужно загрузить.
На странице диаграммы я получаю параметры в созданном методе.Затем я передаю их компоненту для отображения диаграммы
<template>
<div>
//some information
<div class="row">
<div class="col-12" id="parentDiv">
<barchart :file-name = this.fileName></barchart>
</div>
</div>
</div>
</template>
<script>
import Barchart from '../charts/Barchart';
export default {
components: {
'barchart': Barchart
},
data() {
return {
fileName: ''
}
},
created() {
this.fileName = this.$route.params.fileName;
}
}
</script>
Наконец, у меня есть компонент Barchart.Это то, что создает диаграмму на основе загруженных в файл данных.
<script>
import * as d3 from 'd3';
export default {
props: {
fileName: {
type: String,
required: true
}
},
methods: {
createBarChart() {
//d3 to create chart using the file that was uploaded
}
},
created() {
let vm = this;
d3.json('storage/' + this.fileName)
.then(function (data) {
vm.createBarChart(data);
}).catch(function (error) {
// handle error
});
}
};
</script>
Мне кажется, что происходит много передачи данных от одного компонента к другому.Я передаю его из компонента отображения файлов (который отображает все загруженные файлы), затем на страницу диаграммы, которая затем передает ее компоненту диаграммы.
Другая проблема заключается в том, что если я нахожусь на диаграммахстраница, и я обновляю страницу, тогда у диаграммы больше нет имени файла и, следовательно, диаграмма не отображается.Как бы я справился с этой ситуацией?
Любой совет приветствуется