This stackblitz shows one method to get notified when the elements have been created with the ngFor
directive. In the template, you assign a template reference variable #lazyImage
to the img
element:
<div *ngFor="let workCategory of workCategories">
...
<div *ngFor="let workSample of workCategory.fields.workSamples">
<img #lazyImage width="294" height="294" class="lazy-image" src="..." data-src="..." />
</div>
</div>
In the code, @ViewChildren("lazyImage")
is used to declare a QueryList<ElementRef>
associated to these images. By subscribing to the changes
event of the Querylist
in ngAfterViewInit
, you get notified when the elements are available. The HTML elements can then be retrieved from the QueryList
:
import { Component, ViewChildren, AfterViewInit, QueryList } from '@angular/core';
@Component({
...
})
export class AppComponent {
@ViewChildren("lazyImage") lazyImages: QueryList<ElementRef>;
ngAfterViewInit() {
this.lazyImages.changes.subscribe(() => {
let images = this.lazyImages.toArray().map(x => x.nativeElement);
});
}
}
In cases where only the last created item is to be processed, the QueryList.last
can be used:
this.lazyImages.changes.subscribe(() => {
this.doSomethingOnLastImage(this.lazyImages.last);
});
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…