【发布时间】:2020-01-01 23:33:32
【问题描述】:
我想要做的是重新使用带有prop 的vue 组件,该组件从json 对象中获取数据。我的问题是,所有组件都包含相同的数据,而不是基于 de json 对象索引的数据。
我的json 数据如下所示(sn-p):
[
{
"id_department": 3,
"code": "Test2",
"subcode": "Test-new2",
"fee": "1.794.405",
"fte": "13.0",
"fee_per_fte": "138.031",
"details": "0",
"indicatorChartData": [
[
"A",
607990
],
[
"B",
753637
],
[
"C",
25321
]
]
},
{
"id_department": 9,
"code": "Test",
"subcode": "Test-new",
"fee": "892.571",
"fte": "18.0",
"fee_per_fte": "49.587",
"details": "0",
"indicatorChartData": [
[
"A",
525829
],
[
"B",
68512
],
[
"C",
12660
]
]
}
]
我的主要组件(它基本上包含一个 v-for 循环来填充我想要重用的组件)如下所示:
<template>
<div>
<b-card :bg-variant="themeVariant.cardBG" text-variant="gray" class="card-settings" style="padding: 10px; min-height: 660px">
<b-row>
<b-col sm="12">
<span class="float-left">
<h5><icon name="search-plus" scale="1"/> Details</h5>
</span>
</b-col>
</b-row>
<hr>
<b-row>
<b-col sm="12">
<b-list-group flush>
<b-list-group-item v-for="i in tableData" :key="i.id_department" class="flex-column align-items-start" style="background: transparent; text-align: left; border-bottom: 1px; color: rgb(139, 154, 162)">
<b-row>
<b-col md="2">
<b-button v-b-toggle="i.id_department" size="sm" :variant="themeVariant.colPrimary">
Details
</b-button>
</b-col>
</b-row>
<b-collapse :id="i.id_department">
<b-row>
<b-col md="6">
<c-srchartindicatorfee :set-chart-data="i.indicatorChartData"></c-srchartindicatorfee>
</b-col>
</b-row>
</b-collapse>
</b-list-group-item>
</b-list-group>
</b-col>
</b-row>
</b-card>
</div>
</template>
<script>
import Icon from 'vue-awesome/components/Icon.vue'
import srchartindicatorfee from "./chartindicatorfee/srchartindicatorfee"
export default {
name: "srtable",
props: {
tableData: Array
},
components: {
Icon,
"c-srchartindicatorfee": srchartindicatorfee
}
}
</script>
<style scoped>
.card-settings {
margin-bottom: 30px;
}
</style>
我的c-srchartindicatorfee 组件看起来像这样:
<template>
<div>
<highcharts :options="chartIndicatorFee"></highcharts>
</div>
</template>
<script>
import { chartIndicatorFee } from "./chartindicatorfee"
export default {
name: "srchartindicatorfee",
props: {
setChartData: Array
},
data() {
return {
chartIndicatorFee: chartIndicatorFee
}
},
created() {
this.chartIndicatorFee.series[0].data = this.setChartData
},
updated() {
this.chartIndicatorFee.series[0].data = this.setChartData
},
watch: {
setChartData: {
handler(val) {
alert(JSON.stringify(val));
this.chartIndicatorFee.series[0].data = val;
},
deep: true
}
}
}
</script>
<style scoped>
</style>
在最后一个组件中,我想用我的json 对象中的indicatorChartData array 填充setChartData prop。
我希望(因为vue 组件可以重复使用)每个生成的c-srchartindicatorfee 组件都将通过json 通过setChartData prop 保存它自己的数据(indicatorChartData),但是在这种情况下,每个组件都保存我的 json 对象中最后一个条目的数据。
对这个问题有什么想法吗?
【问题讨论】:
-
您是否尝试在手表内复制而不是
this.chartIndicatorFee.series[0].data = val;?它可能看起来像this.chartIndicatorFee.series[0].data = [...val]; -
我会试一试,然后告诉你。感谢您的洞察力!
-
我有一个新问题:我让它工作了,但我重复使用的组件崩溃了。当我展开我的第一个折叠时,它会显示
json中第一个条目的数据。但是当我也展开我的第二个折叠时,第一个图表和第二个图表都显示了第二个json条目的数据。当我展开第三个折叠时,所有三个图表都包含第三个json条目的数据,依此类推...
标签: javascript json vue.js components