Создавая приложение, позволяющее людям обмениваться изображениями и видео, я обнаружил повторяющуюся проблему.
Иногда изображения/видео, которое приложение пыталось загрузить, не было, и оно показывало это пользователю:
Итак, как и любой разработчик, обнаруживший ошибку, на которой не собирались акцентировать внимание, я залез в кроличью нору, чтобы посмотреть, как решить эту проблему!
Реакция на неработающие ссылки на изображения
Внутри элемента img
у нас есть событие ошибки, которое генерируется при возникновении каких-либо проблем с загрузкой носителя. Благодаря этому мы можем настроить способ загрузки изображения, которое, как мы знаем, будет загружено для использования в качестве резервной копии.
Мы можем обнаружить это событие, выполнив следующие действия:
<img alt="Main Image" *ngIf="!displayDefaultImage" [src]="imageValue" (error)="handleError()" > <img alt="Backup Image" *ngIf="displayDefaultImage" [src]="defaultImage" >
Теперь, когда мы добавили в HTML прослушиватель функций, мы можем использовать его в нашем машинописном коде:
... imports @Component({ selector: 'my-component', templateUrl: './my-component.component.html', changeDetection: ChangeDetection.OnPush, }) export class MyComponent { displayDefaultImage = false; imageValue = ''; // Link to Image that may/may not load defaultImage = ''; // Link to Default Image that we know will load handleError() { this.displayDefaultImage = true; } }
Реакция на неработающие ссылки на видео
Мы можем сделать это с помощью таких видео:
<video *ngIf="!displayDefaultVideo" width="320" height="240" controls> <source [src]="videoUrl" (error)="displayDefaultVideo = true" type="video/mp4"> Your browser does not support the video tag. </video> <img alt="Default Image" [src]="defaultImage" *ngIf="displayDefaultVideo">
Самое интересное то, что мы можем иметь приблизительно один и тот же код, просто изменив часть image
в именах переменных на, очевидно, video
.
Код и рабочий пример
Если вам нужна копия кода, который я написал сегодня, вы можете щелкнуть здесь, чтобы просмотреть пример кода Stackblitz в этой статье.
Бонусный контент:
Если вы хотите прочитать об удивительной причине отображения после того, как контент не удалось загрузить:
ИЛИ о том, как реализовать визуальное представление контента до загрузки элемента, обязательно прочтите статью ниже!
Enhance Ionic — 🦴 Добавление костей в ваше приложение Ionic 5 💀
Когда вы нажмете на этот пост, вы можете подумать: «Он собирается поговорить о структурировании вашего приложения Ionic и о том, что нужно сделать. …javascript.plainenglish.io»
Чтобы просмотреть мои ранее написанные статьи или связаться со мной, посетите мой сайт, нажав нажмите здесь!
Спасибо, что дочитали до конца. Пожалуйста, подумайте о том, чтобы подписаться на автора и эту публикацию. Посетите Stackademic, чтобы узнать больше о том, как мы демократизируем бесплатное образование в области программирования во всем мире.