我有以下JSON数据:
[
{
"amount": 75,
"date": "2020-04-22",
"entradas": [
{
"date": "2020-04-22",
"amount": "100.00",
"title": "test 1"
},
{
"date": "2020-04-22",
"amount": "-25.00",
"title": "test 2"
}
]
},
{
"amount": 10,
"date": "2020-04-30",
"entradas": [
{
"date": "2020-04-30",
"amount": "10.00",
"title": "test 3"
}
]
}
]
我想要实现的是将所有这些“ entradas”记录一起呈现,因此在这种情况下,它应该在数据表中呈现3行,每个“ entradas”对应一行。
我有以下基本方法通过axios加载json:
methods: {
loadData () {
axios.get('dataapi')
.then(response => this.dataItems = response.data)
},
}
和
data () {
return {
headers: [
{
text: 'Data',
align: 'start',
sortable: false,
value: 'date',
},
{ text: 'Title', value: 'title', sortable: false },
{ text: 'Amount', value: 'amount', sortable: false },
],
dataItems: []
}
},
<template>
<v-app id="testdatatable">
<v-data-table
:headers="headers"
:items="dataItems.entradas"
class="elevation-1"
></v-data-table>
</v-app>
</template>
问题在于,当我使用:items="dataItems.entradas"
时,它什么都不会渲染。如果我仅使用:items="dataItems"
,并且标头使用类似value: 'entradas.title'
我已经尝试过使用.map函数的一些解决方法,就像我看到的一些类似示例一样,但是我没有弄清楚在这种情况下如何提供帮助...
答案 0 :(得分:1)
您只需要一个简单的reduce
即可平整嵌套的项目数组。
methods: {
loadData () {
axios.get('dataapi')
.then((response) => {
this.dataItems = response.data.reduce(function(acc, v) {
return [...acc, ...v.entradas]
},[])
})
},
}
<v-data-table
:headers="headers"
:items="dataItems"
class="elevation-1"
></v-data-table>
答案 1 :(得分:0)
尝试一下
...
data () {
return {
headers: [
{
text: 'Data',
align: 'start',
sortable: false,
value: 'date',
},
{ text: 'Title', value: 'title', sortable: false },
{ text: 'Amount', value: 'amount', sortable: false },
],
dataItems: [],
}
},
methods: {
loadData () {
axios
.get('dataapi')
.then(response => {
this.dataItems = response.data.map(dataItem => {
const { amount, date, entradas } = dataItem
entradas.map(entrada => {
return {
amount,
date,
...entrada
}
})
})
})
},
}
...
<template>
<v-app id="testdatatable">
<v-data-table
:headers="headers"
:items="dataItems"
class="elevation-1"
></v-data-table>
</v-app>
</template>