【发布时间】:2019-06-25 11:11:37
【问题描述】:
我对 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>
对我来说,似乎有很多数据从一个组件传递到另一个组件。我将它从文件显示组件(显示所有上传的文件)传递到图表页面,然后将其传递给图表组件。
另一个问题是,如果我在图表页面上,并且我刷新页面,那么图表不再具有文件名属性,因此图表不会呈现。我将如何处理这个 情况?
任何建议表示赞赏
【问题讨论】:
-
这个流程对我来说看起来很典型,并且对于保持组件模块化是必要的。我有一个建议是pass your route params as props。这减少了在
created挂钩中获取参数的需要。 -
谢谢,将实现道具而不是参数。你对页面刷新丢失道具有什么建议吗?我看过有关实现本地存储的讨论,不确定这是最佳选择吗?
-
我很确定页面刷新问题将通过制作路由参数道具来解决。
标签: vue.js vuejs2 vue-component