Angular directive for a fallback image

前端 未结 4 895
走了就别回头了
走了就别回头了 2020-11-30 21:13

If an image on a separate server doesn\'t exist I\'d like to display a default image. Is there an angular directive to accomplish this?

相关标签:
4条回答
  • 2020-11-30 21:46

    I wrote my own fallback lib.

    A pretty simple and straightforward angular fallback image lib:

    https://github.com/alvarojoao/angular-image-fallback

    Utility to work with loading images and handling image error, has image-holder to handle errors in image loading and image-loading for images loading placeholders

    http://alvarojoao.github.io/angular-image-fallback

    Usage

    Just add the image attribute to your <img /> tags

    <img image="{{'path/to/img.jpg'}}" />
    

    Make sure you don't use ng-src as your image src attribute.

    Advanced options

    with custom fallback and loading placeholders:

    <img image="{{image.url}}" image-loading="/image/loading.gif" 
         image-holder="/image/error.png" />
    

    Example:

    https://jsfiddle.net/alvarojoao/4wec4gsq/embedded/result/

    0 讨论(0)
  • 2020-11-30 21:54

    No but you can create one.

    http://jsfiddle.net/FdKKf/

    HTML:

    <img fallback-src="http://google.com/favicon.ico" ng-src="{{image}}"/>
    

    JS:

    myApp.directive('fallbackSrc', function () {
      var fallbackSrc = {
        link: function postLink(scope, iElement, iAttrs) {
          iElement.bind('error', function() {
            angular.element(this).attr("src", iAttrs.fallbackSrc);
          });
        }
       }
       return fallbackSrc;
    });
    
    0 讨论(0)
  • 2020-11-30 21:58

    Is there an angular directive...

    http://ngmodules.org/modules/angular-img-fallback

    Github: https://github.com/dcohenb/angular-img-fallback

    (32 stars as of now)

    0 讨论(0)
  • 2020-11-30 22:02

    Angualr 2 Version

    https://github.com/VadimDez/ng2-img-fallback

    HTML

    <img fallback-src="http://google.com/favicon.ico" src="http://google.com/failedImage.png"/>
    

    Angular 2 Component

    import { Directive, ElementRef, Input } from '@angular/core';
    
    @Directive({
      selector: '[fallback-src]'
    })
    export class FallbackSrc {
    
      @Input('fallback-src') imgSrc: string;
      private el: HTMLElement;
      private isApplied: boolean = false;
      private EVENT_TYPE: string = 'error';
    
      constructor(el: ElementRef) {
        this.el = el.nativeElement;
        this.el.addEventListener(this.EVENT_TYPE, this.onError.bind(this))
      }
    
      private onError() {
        this.removeEvents();
    
        if (!this.isApplied) {
          this.isApplied = true;
          this.el.setAttribute('src', this.imgSrc);
        }
      }
    
      private removeEvents() {
        this.el.removeEventListener(this.EVENT_TYPE, this.onError);
      }
    
      ngOnDestroy() {
        this.removeEvents();
      }
    }
    
    0 讨论(0)
提交回复
热议问题