从嵌套 api 链接获取数据

问题描述 投票:0回答:1

我有一个在数组中提供其他 api 链接的 api,我可以从数组的第一级获取数据,但我也想从另一个数组内的 api 获取数据。例如,字符数组如何在 Api 中获取数据?

以下为详细页面。 API链接https://swapi.dev/api/films/1

<template>
  <div class="container mt-5 mb-5">
    <div class="row justify-content-md-center">
      <div class="col-12 col-md-10">
          <div class="movie__content-wrap content">
            <template v-if="movie">
            <h1 class="movie__card-title card-title text-center">{{ movie.title }}</h1>
              <div class="meta mt-5 mb-5">
                <p class="mb-0"><strong>Episode: </strong>{{ movie.episode_id }}</p>
                <p class="mb-0"><strong>Release date:</strong>{{ movie.release_date }}</p>
                <p class="mb-0"><strong>Characters: </strong>{{ movie.characters }}</p>
              </div>
              <p class="mt-4 mb-5">{{ movie.opening_crawl }}</p>
            </template>
          </div>
        </div>
    </div>
  </div>
</template>

<script>
import axios from 'axios';
export default {
  name: 'MovieDetails',
  props: 
  {
    id: String,
  },
  data(){
    return {
      movie: null,
    }
  },
  mounted() {
    axios.get('https://swapi.dev/api/films/'+this.id)
      .then(response => {
        this.movie = response.data;
      })
      .catch(error => {
        console.log(error);
      });
  },
};
</script>

api vue.js axios vuejs3 router
1个回答
0
投票

要获取角色数据,您需要向角色 URL 发出额外的 API 请求并收集数据。具体方法如下:

首先,修改您的电影对象以包含角色数组 数据。将其初始化为空数组:

data() {
  return {
    movie: {
      charactersData: [],
    }
  }
},

在挂载的钩子中,获取电影数据后,您可以发出额外的请求来获取角色数据:

mounted() {
  axios.get('https://swapi.dev/api/films/' + this.id)
    .then(response => {
      this.movie = response.data;

      // Fetch character data for each character URL
      const characterPromises = this.movie.characters.map(characterUrl => axios.get(characterUrl));

      // Wait for all character data requests to complete
      Promise.all(characterPromises)
        .then(characterResponses => {
          this.movie.charactersData = characterResponses.map(response => response.data);
        })
        .catch(error => {
          console.error(error);
        });
    })
    .catch(error => {
      console.error(error);
    });
},

现在,您可以在模板中使用 movie.charactersData 来显示角色信息:

<p class="mb-0"><strong>Characters:</strong>
  <ul>
    <li v-for="character in movie.charactersData" :key="character.url">
      {{ character.name }}
    </li>
  </ul>
</p>

通过这些更改,您将获取

movie.characters
数组内每个字符 URL 的数据并将其存储在
movie.charactersData
中。然后,您可以迭代
movie.charactersData
以在模板中显示角色名称。

© www.soinside.com 2019 - 2024. All rights reserved.