背景图像上的 Angular (负载)

标签 angular typescript

我正在使用 Angular 5,并且试图在加载 div 的背景图像时获取加载图标。
如果它是一个普通的图片,我对此没有问题,但如果我尝试将它作为背景,它就不起作用。

这是一些示例代码

app.component.html

<div class="test" [someDirective]="'some/otherImg.jpg'"></div>  
<img class="test" [someDirective]="'some/OtherImg.jpg'">

app.component.css

.test{
  width: 300px;
  height: 200px;
}

some.directive.ts

import { Directive, ViewChild, Input, ElementRef, HostListener } from '@angular/core';
@Directive({
  selector: '[someDirective]'
})
export class SomeDirective {
  @Input() someDirective:string;

  constructor(private element:ElementRef){
    element.nativeElement.src = 'some/imgUrl.gif';
    element.nativeElement.style = "background-image: url('some/imgUrl.gif')";
  } 

  @HostListener('load', ['$event'])
  onLoad() {
    this.element.nativeElement.src = "some/otherImg.jpg";
    this.element.nativeElement.style = "background-image: url('some/otherImg.jpg')";
  }
}  

有没有办法让它工作,以便背景也以与普通图像相同的方式加载?

我应该提到,让加载 gif 作为背景图像没有任何问题,它工作正常,但不会改变。

最佳答案

不要直接操作ElementRef。使用Renderer类。使用可观察量尝试此实现。就像 zmanc 提到的那样,你不能使用 background-url 技术。坚持使用 src 属性。

import { Directive, ElementRef, Renderer2, HostListener } from '@angular/core';

import { fromEvent } from 'rxjs/observable/fromEvent';
import { first } from 'rxjs/operators';

@Directive({
  selector: '[load]',
})
export class LoadImageDirective {
  constructor(private renderer: Renderer2, private el: ElementRef) { }

  ngOnInit() {
    fromEvent(this.el.nativeElement, 'load')
      .pipe(first())
      .subscribe(() => this.setImage())

    this.setPlaceholder();

  }

  private setPlaceholder() {
    this.renderer.setAttribute(
      this.el.nativeElement,
      'src', `https://via.placeholder.com/50x50`
    )
  }


  private setImage = () => {
    this.renderer.setAttribute(
      this.el.nativeElement,
      'src', `https://http.cat/400`
    )
  }
}

Live demo

关于背景图像上的 Angular (负载),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49856414/

相关文章:

Angular:如何确定带参数的事件路线?

angular - RxJs : How to rethrow error from observable

javascript - 如何根据 Angular 选择值隐藏输入字段?

javascript - 使用 D3.js 的 typescript 类型转换

angular - 如何在 Angular 4 中将值从子组件传递到父组件

javascript - Angular 2如何防止特定变量的数据绑定(bind)

angular - 执行测试后运行的 Karma 测试屏幕变为空白

typescript 泛型 : checking a unique property on a generic type object in if condition doesn't determine the object's type

javascript - 为什么当不相关的状态发生变化时,我的 redux 容器会渲染?

reactjs - 使用 TypeScript 在 create-react-app 中创建故事书