如何在Vue和Axios中遍历API端点JSON对象?

时间:2019-06-27 17:50:34

标签: javascript api vue.js axios rendering

我有一个API端点,它是一个JSON对象。我正在使用Axios和Vuejs将数据提取到DOM中,但是我只能获取整个对象。当我尝试使用v-for指令遍历时,它不会在对象中输出特定项目。

我像这样使用Axios提取数据:

export default {
  name: 'Reviews',
  props: {
    title: String
  },
  data(){
    return {
      info: []
    }
  },
  // Life cycle hook that calls axios
  mounted(){
    axios.get('http://dev.muvtravel.com/index.php/explore/test?tripid=6590').then(response => {
      console.log(response.data)
      this.info = response.data
    })
  }
}

然后尝试使用v-for

<div v-for="(item, index) in info" :key="index">
   {{ item.establishment_address }}
   {{ item.phone }}
</div>
<template>
  <div class="reviews container-fluid">
    <h1 class="text-center">{{ title }}</h1>
    <b-container>
      <b-row>
        <b-col cols="12" sm="12" md="12" lg="4" xl="4">
          Column 1
        </b-col>

        <b-col cols="12" sm="12" md="12" lg="8" xl="8">
          Column 2
        </b-col>
      </b-row>
    </b-container>

    <div v-for="(item, index) in info" :key="index">
      {{ item.establishment_address }}
      {{ item.phone }}
    </div>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  name: 'Reviews',
  props: {
    title: String
  },
  data(){
    return {
      info: []
    }
  },
  // Life cycle hook that calls axios
  mounted(){
    axios.get('http://dev.muvtravel.com/index.php/explore/test?tripid=6590').then(response => {
      console.log(response.data)
      this.info = response.data
    })
  }
}
</script>

<style scoped lang="scss">

</style>

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

因此,我检查了代码中的API端点是否已公开打开-是的。

从查看您的有效负载来看,您的代码无法正常工作的原因是因为您正在尝试迭代一个对象。您要返回的data对象是来自该API端点的FULL有效负载,该对象是对象{"success": true, "data": [...]"}

为更清楚地说明我在说什么,您可以运行以下示例fetch

fetch(yourAPIEndpoint).then(res => res.json()).then(data => console.log(data));

我运行该命令时,会将其打印到控制台:

{success: true, data: Array(15)}

当我编辑上面的console.log以输出data.data时,

fetch(yourAPIEndpoint).then(res => res.json()).then(data => console.log(data.data));

我得到了您要设置的位置数组。

TL; DR:您需要设置this.info = response.data.data

编码愉快!