使用 Axios 在 Vuetify v-data-table 中未显示 JSON 数据

Posted

技术标签:

【中文标题】使用 Axios 在 Vuetify v-data-table 中未显示 JSON 数据【英文标题】:JSON data not displaying in Vuetify v-data-table using Axios 【发布时间】:2020-07-06 07:17:54 【问题描述】:

无法获取要显示的 JSON 数据。我正在接收数据。尝试从 JSON 中获取两个字段并将其放入 v-data-table 中。在当前的形式中,表格生成并且正确的行数出现在记录数中,但每一行都是空白的。

JSON 数据示例:

"records": [
    "id": "recFWwl9WYekKQhy5",
    "fields": 
        "Date": "2020-03-28T04:35:00.000Z",
        "Client": [
            "reciiW7xvFNJNb4yF"
        ],
        "Details": "Testing",
        "Town": "madfa"
    ,
    "createdTime": "2020-03-25T04:35:16.000Z"
  ]

还有代码:

<template>
  <v-data-table
    :headers="headers"
    :items="items"
    :items-per-page="5"
    class="elevation-1"
  >
    <template v-slot:item="props">
        <tr>
            <td>new Date(props.item.Date).toLocaleString()</td>
            <td> props.item.Client </td>
            <td> props.item.Details </td>
        </tr>
    </template>
  </v-data-table>
</template>

<script>
import axios from 'axios'
export default 
  components: ,
  computed: ,
  data() 
    return 
      headers: [
        
          text: 'Date',
          align: 'start',
          sortable: true,
          value: 'Date',
        ,
         text: 'Client Name', value: 'Client' ,
         text: 'Details', value: 'Details' ,
      ],
      items: []
    
  ,
  mounted() 
      this.loadItems(); 
  ,
  methods: 
    loadItems() 

      // Init variables
      var self = this
      var app_id = "appID";
      var app_key = "key";
      this.items = []
      axios.get(
        "https://api.airtable.com/v0/"+app_id+"/openrideAppointments",
         
          headers:  Authorization: "Bearer "+app_key  
        
      ).then(function(response)
        self.items = response.data.records.map((item)=>
          return 
              id: item.id,
              ...item.fields
          
        )
      ).catch(function(error)
        console.log(error)
      )
    
  

</script>

【问题讨论】:

你使用的是哪个 vuetify 版本? 如果你使用 vuetify v2,试试这个answer 我正在使用 Vuetify 2 - 现在试试你的答案 非常感谢。我现在以漂亮的格式将日期放入相应的日期列中,但是我仍在尝试弄清楚如何将 Client 和 Details 值添加到相应的列中(或根本不显示)。:跨度> 你们俩都很棒 - 更新了最终解决方案。 【参考方案1】:

基于此answer 格式化一列,但如果您想格式化多列,您应该执行以下操作:

 <template v-slot:item="props">
        <tr>
            <td>new Date(props.item.fields.Date).toLocaleString()</td>
            <td> props.item.fields.Client </td>
            <td> props.item.fields.Details </td>
        </tr>
    </template>

【讨论】:

【参考方案2】:

Airtable API 响应包含 fields 中的值,因此您应该展平响应...

 self.items = response.data.records.map((item)=>
        return 
            id: item.id,
            ...item.fields
        
 )

并确保您使用的是正确的 Vuetify 2.x 插槽模板...

    <template v-slot:item="props">
        <tr>
            <td> props.item.Date </td>
            <td> props.item.Client </td>
            <td> props.item.Details </td>
        </tr>
    </template>

演示:https://codeply.com/p/gdv5OfRlOL

【讨论】:

谢谢,不过,我添加了这些字段,但仍然无法正常工作。 这不起作用,因为 vuetify v1.x 语法,但是他使用 v2,所以他应该做类似this 这行得通! Boussadjra 的答案也适用于日期格式(尽管我还没有完全弄清楚)。谢谢! 你们俩都很棒 - 更新了最终解决方案。 @gcubed 你不应该用解决方案更新你的问题,尽量保留原始问题并将解决方案作为答案发布

以上是关于使用 Axios 在 Vuetify v-data-table 中未显示 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 vuetify 2 v-file-input 和 axios 上传文件

Vue 未使用来自 Axios 请求的数据更新数组中的 Vuetify 数据表

POST 和 PUT 请求中的问题,使用 axios、vuetify 数据表、vuejs

使用 Axios 在 Vuetify v-data-table 中未显示 JSON 数据

使用 Jest 对 Vuetify 数据表进行单元测试

Vue编辑已作为prop传递给组件的v-data