File
Metadata
selector |
re-overlay |
styleUrls |
overlay.component.scss |
templateUrl |
./overlay.component.html |
Index
Properties
|
|
Methods
|
|
Inputs
|
|
HostListeners
|
|
HostListeners
window:resize
|
window:resize()
|
|
Methods
Private
adjustOverlayPosition
|
adjustOverlayPosition()
|
|
|
import {
Component,
Input,
ViewChild,
ElementRef,
Renderer2,
HostListener
} from '@angular/core';
import { OverlayOptions } from './overlay-options.model';
import { WindowRef } from '../window-ref/window-ref.service';
import { OverlayContentComponent } from './overlay-content.component';
import { centerWindowPosition } from '../utils/dom-utils';
@Component({
selector: 're-overlay',
templateUrl: './overlay.component.html',
styleUrls: ['./overlay.component.scss'],
})
export class OverlayComponent {
@Input() overlayOptions: OverlayOptions;
@ViewChild('overlayBody') overlayBody: ElementRef;
@ViewChild(OverlayContentComponent) overlayContent: OverlayContentComponent;
constructor(private windowRef: WindowRef, private renderer: Renderer2) {
}
addContent(options: OverlayOptions) {
this.overlayOptions = options;
if (!this.overlayOptions.html && this.overlayOptions.component) {
this.overlayContent.addContent(this.overlayOptions);
}
this.adjustOverlayPosition();
}
@HostListener('window:resize', [])
onWinResize() {
this.adjustOverlayPosition();
}
private adjustOverlayPosition() {
setTimeout(() => {
const pos = centerWindowPosition(this.overlayBody, this.windowRef);
this.renderer.setStyle(this.overlayBody.nativeElement, 'top', `${pos.top}px`);
this.renderer.setStyle(this.overlayBody.nativeElement, 'left', `${pos.left}px`);
}, 0);
}
}
<div #overlayBody class="overlay-body" style="z-index: 1050;top:300px;left: 200px;">
<div *ngIf="overlayOptions?.html" [innerHTML]="overlayOptions.html"></div>
<re-overlay-content #overlayContent style="display: none;"></re-overlay-content>
</div>
<re-modal-backdrop [isOpen]="true" [modalOptions]="overlayOptions"></re-modal-backdrop>
Legend
Html element with directive