TerNik
@TerNik

Заглушка на отсутствующее изображение Vue.js?

Доброго времени суток!

Проект создан vue-cli.
Содержимое ячеек таблицы зависит от поступающих данных, присутствуют изображения.
Если изображение отсутствует, случается ошибка рендеринга, компонент (строка таблицы) не отображается. Соответственно, хочется произвести проверку на наличие изображения, если изображение отсутствует, как-то это отобразить.
Я пробовал вот так вот:
<td v-html="showType(rowData.type)"></td>

showType (type) {
    let path = `@/assets/img/icon/${type}-type-icon.png`
    return `<img src="${getImg(path)}" />`
}


function getImg (path) {
  let result
  try {
    result = require(path)
  } catch (e) {
    if (e.code !== 'MODULE_NOT_FOUND') {
      throw e
    }
    result = require('@/assets/img/icon/error-load.png')
  }
  return result
}


При этом блок try не выполняется, всюду заглушка.
Но если написать в блоке try
result = require(@/assets/img/icon/some-icon.png)
то блок try без ошибок исполняется.
Видимо, как-то неправильно передается path?

Вопросы:
1. Что я делаю не так?
2. Может быть есть более правильный способ?

Спасибо!
  • Вопрос задан
  • 1074 просмотра
Решения вопроса 2
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
Или так. В main.js в конце пишем
window.fallbackImage = require('./components/img/fallback.png')

Используем так
<img :src="avatar" onerror="this.onerror=null;this.src=window.fallbackImage">
Ответ написан
Комментировать
TerNik
@TerNik Автор вопроса
Проблему удалось решить, вдруг кому пригодится.
Дело вот в чем: webpack не умеет корректно работать с
require(path)
Ему обязательно нужна конкретика, как именно начинается путь
require('@/begin/of/path' + endOfPath)
Соответственно, переписал функцию получения картинки и передаю в нее не полный путь, а только путь от папки изображений:
function getImg (path) {
  let result
  try {
    result = require('@/assets/img/' + path)
  } catch (e) {
    if (e.code !== 'MODULE_NOT_FOUND') {
      throw e
    }
    result = require('@/assets/img/icon/error-load.png')
  }
  return result
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Artem0071
Безработный mr. Junior
Чет жуть какая то у вас

Сделайте приблизительно так:
<img :src="path?path:null" />

Либо создайте какое то изображение и суйте его вместо null

ps увидел что что то у вас есть, так что можно как то так:
<img :src="path?path:'@/assets/img/icon/error-load.png'" />


Ну или подравняйте там пути
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы