Задать вопрос
@misterobot404

Не отображается картинка при первой загрузке?

Computed, который проверяет, является ли ссылка ссылкой на картинку
5cbc4a65e7d91765695027.jpeg
Использование:
5cbc4a6b43be2384357340.jpeg
Но вопреки ожиданиям, когда он должен показывать картинку, он показывает псевдокод (хотя в консоли я вижу '400' - высоту картинки, на которую ссылаюсь). После первого запуска и кэширования картинки проблема исчезает, до следующего ^f5. Что подскажете?
  • Вопрос задан
  • 106 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Загрузка картинки - операция асинхронная. Так что проверять высоту сразу после установки src - идея сильно так себе. Это надо делать после загрузки, в onload. Computed вам тут не сильно поможет.

Сделайте checkExistImages вместо вычисляемого свойства обычным, а на getSelectedEvent.mediaUrl повесьте наблюдателя, в котором и проверяйте картинку:

watch: {
  'getSelectedEvent.mediaUrl'(val) {
    const img = new Image();
    img.onload = () => this.checkExistImages = img.height > 0;
    img.onerror = () => this.checkExistImages = false;
    img.src = val;
  },
},

Ну или можете воспользоваться каким-нибудь плагином, реализующим асинхронные вычисляемые свойства, таким как vue-async-computed, например - возвращаете промис, который будет резолвиться в onload картинки, как-то так.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы