Один раз создать, а потом скрывать/показывать
public reveal(overlay: HTMLDivElement): void {
this.renderer.setStyle(overlay, 'display', '');
}
public hide(overlay: HTMLDivElement): void {
this.renderer.setStyle(overlay, 'display', 'none');
}
public createOverlay(el: HTMLElement): HTMLDivElement {
const { renderer, spinnerSrc, ensurePosition } = this;
const overlay: HTMLDivElement = renderer.createElement('div');
renderer.addClass(overlay, 'loading-overlay');
const img: HTMLImageElement = renderer.createElement('img');
renderer.addClass(img, 'loading-spinner');
renderer.setAttribute(img, 'src', spinnerSrc);
renderer.appendChild(overlay, img);
renderer.appendChild(el, overlay);
ensurePosition(el, renderer);
return overlay;
}
private ensurePosition(el: HTMLElement, renderer: Renderer2) {
const { position } = getComputedStyle(el);
if (!(['absolute', 'fixed', 'relative'].some(p => p === position))) {
renderer.setStyle(el, 'position', 'relative');
}
}
this.elRef.nativeElement -> el