Поиск giphy URL в списке v-for (Vue.js)

У меня есть список персонажей фильмов, которые я получаю от вызова REST на свой сервер с помощью axios. Я показываю их в загрузочной карточке для каждого символа. То, что я пытаюсь сделать, это найти giphy по имени персонажа и использовать URL-адрес giphy как img-src для карты.

Когда я пробую это и заглядываю в инструменты разработки Vue, img-src показывает «обещание».

<template>
  <div class = "characters">
    <b-container>
      <b-card-group columns>
        <b-card
          v-for = "character in characters"
          v-bind:key = "character.id"
          :title = "character.name"
          :img-src = "getGiphy(character.name)"
          img-alt = "Image"
          img-top
          tag = "article"
          style = "max-width: 20rem;"
          class = "mb-2"
        >
          <b-card-text>
            This character is a {{character.role}}
          </b-card-text>
        </b-card>
      </b-card-group>
    </b-container>
  </div>
</template>

я пытаюсь получить источник изображения с помощью :img-src = "getGiphy(character.name)"

@Component
export default class Characters extends Vue {
  public characters: Character[] = [];
  public fields: string[] = ['name', 'role'];

  public async getGiphy(name: string) {
    const giphyApi: string =
      '//api.giphy.com/v1/gifs/search?api_key=xxxxxxxxxxx&limit=1&q=';
    const response = await axios.get(giphyApi + name);
    return response.data.data[0].image_url;
  }

  private async created() {
    const response = await axios.get('/api/characters');
    this.characters = await response.data._embedded.characters;
  }
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Vue не может разрешать обещания в свойствах, поэтому вам нужно сделать что-то вроде этого.

Шаблон

<b-card
  ...
  :img-src = "character.giphyImage"
  ...
>

ТС

private async created() {
  ...
  await Promise.all(this.characters.map(async character => {
    character.giphyImage = await this.getGiphy(character.name);
  }));
}

Спасибо. В этом есть смысл. Теперь я получаю URL-адреса для каждого персонажа. Почему-то изображения не отображаются. imgSrc в инструментах Vue Developer говорит "null"

vince 10.04.2019 17:47

@винс хорошо! Вы использовали правильный протокол http:?

A1rPun 10.04.2019 17:50

Итак... я пошел в туалет прямо сейчас, и когда я вернулся, изображения показывались. По какой-то причине их загрузка занимает целую вечность. Я нажал «Обновить» 10 минут назад, и они все еще не отображаются. Странный.

vince 10.04.2019 17:56

@vince Не стесняйтесь задавать другой вопрос, если вы застряли, сообщество SO будет радо помочь!

A1rPun 10.04.2019 18:06

Другие вопросы по теме