VueJs @error для обработки битых ссылок в изображениях

Я столкнулся со странной проблемой с обработчиком vueJs @error, чего я хочу
do заключается в том, чтобы скрыть изображения с неработающими ссылками и вместо этого отобразить заполнитель, но если у меня, например, есть два изображения, и оба из них имеют неработающие ссылки, только первое изображение неработающей ссылки отображает заполнитель, а другое изображение с неработающей ссылкой просто отображается, сломанный логотип браузера по умолчанию

вот код, который я сделал для тестирования, я знаю, что это неправильный способ написания кода в Vue, но он был для целей тестирования

  <div id = "app">
    <img width = "25%" id = "img" src = "https://upload.wikimedia.org/wikipedia/commons/5/54/Wallpaper-img_0254.jpg" @error = "handle()">
    <img width = "25%" id = "img" src = "https://images.pexels.com/photos/248797/pexels-photo-248797.jpeg?auto=compress&cs=tinysrgb&h=350" @error = "handle()">
    <img v-show = "ifImageBroken" src = "https://via.placeholder.com/300">
    <p>{{brokenText}}</p>
    <HelloWorld/>
  </div>

<script>
import HelloWorld from "./components/HelloWorld";

export default {
  name: "App",
  data () {
    return {
      ifImageBroken: false,
      brokenText: ''
    }
  },
  components: {
    HelloWorld
  },
  methods: {
    handle : function() {
     document.getElementById('img').style.display = 'none'
     this.ifImageBroken = true;
     this.brokenText = 'unable to load image'
    }
  }
};
</script>

Я просто хотел знать, может ли эта директива @error обрабатывать несколько случаев неработающих изображений

Я думаю, проблема может быть в том, что у вас есть 2 элемента img с одинаковым значением id. Стандартный HTML не допускает этого, поскольку идентификатор должен быть уникальным. Если у вас есть несколько элементов с одним и тем же id, только (я считаю) первый будет работать с getElementById.

T. Dirks 30.11.2018 13:46
Поведение ключевого слова "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) для оценки ваших знаний,...
0
1
5 057
1

Ответы 1

У меня та же проблема, и я использую object для ее решения, потому что @error зависит от битых ссылок, но не от битых изображений внутри ссылок, поэтому я создаю что-то для переключения между ними.

<object data = "https://here the right image if not found will display the image inside img tag.jpg" type = "image/png">
    <img src = "https://via.placeholder.com/300" alt = "Not found image">
</object>

В первом будет проверяться, найден ли :data в object или нет, если он не найден, он переключится на тег <img>, и здесь вы поместите свой образ-заполнитель,

Обновление 2: Я использую ваш код и обновляю его, надеюсь он сработает

  <div id = "app">
    <img width = "25%" id = "img" src = "https://upload.wikimedia.org/wikipedia/commons/5/54/Wallpaper-img_0254.jpg" @error = "imgPlaceholder">

    <img width = "25%" id = "img" src = "https://images.pexels.com/photos/248797/pexels-photo-248797.jpeg?auto=compress&cs=tinysrgb&h=350" @error = "imgPlaceholder">
    <p>{{brokenText}}</p>
    <HelloWorld/>
  </div>

<script>
import HelloWorld from "./components/HelloWorld";

export default {
  name: "App",
  data () {
    return {
      ifImageBroken: false,
      brokenText: ''
    }
  },
  components: {
    HelloWorld
  },
  methods: {
    imgPlaceholder(e) {
        e.target.src = "https://via.placeholder.com/300"
    }
  }
};
</script>

Здесь я создаю новый метод, который принимает событие и заменяет текущее неработающее изображение URL-адреса другим.

да, если он динамический, но если это обычный URL с https, вы будете использовать data = "", если динамический URL вы будете использовать: data = ""

Moumen Soliman 30.11.2018 13:54

Я обновил ответ в data = "here right image link", и если правая ссылка на изображение не работает, он отобразит изображение внутри <img src = "here the not found image placeholder" >.

Moumen Soliman 30.11.2018 13:58

хммм, но вы вообще не используете @error, вы думаете, что это все еще может работать с @error, я имею в виду, может ли он работать с v-show, чтобы скрыть или показать заполнитель, но все еще сохраняя тег <object>

Puzant Bakjejian 30.11.2018 14:01

Я не использую @error в этом случае, потому что он не улавливает битые изображения, но улавливает битые URL-адреса, поэтому, если у вас есть загрузка поля в изображении, <object> заменит его другим изображением, но @error не поймает что-то вроде это, и да, вы можете использовать это с v-show

Moumen Soliman 30.11.2018 14:06

Таким образом, вы можете добавить более одного не найденного образа и добавить условия v-if для управления им без обработчика @error.

Moumen Soliman 30.11.2018 14:07

что вы имеете в виду, что он не улавливает битые изображения, это URL-адрес, который должен быть сломан, а не изображение, что я имел в виду в своем вопросе, это проверить, есть ли у нескольких изображений сломанные URL-адреса и как заменить все из них

Puzant Bakjejian 30.11.2018 14:09

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