projects/commons/src/lib/elements/dialog/services/dialog.service.ts
Methods |
|
constructor(injector: Injector, domService: DomService)
|
|||||||||
|
Parameters :
|
| Private getComponentRef | ||||||
getComponentRef(config: any)
|
||||||
|
Parameters :
Returns :
any
|
| Public open | |||||||||
open(componentOrTemplateRef: ComponentType
|
|||||||||
Type parameters :
|
|||||||||
|
Parameters :
Returns :
any
|
import { ComponentType } from '@angular/core/src/render3';
import { Injectable, Injector, TemplateRef } from '@angular/core';
import { DialogComponent } from '../components';
import { DomService } from '../../../shared/dom/dom.service';
import { extendObject } from '../../../shared/util/object-extend';
import { PortalInjector } from '../../../shared/portal/portal-injector';
@Injectable()
export class DialogService {
constructor(
private injector: Injector,
private domService: DomService,
) {}
public open<T>(componentOrTemplateRef: ComponentType<T> | any | TemplateRef<T>, config: any): any {
config = { ...{ hasBackdrop: true }, ...config };
const componentRef = this.getComponentRef(config);
(componentRef.instance as any)._setComponent(componentOrTemplateRef);
return componentRef.instance as DialogComponent<T>;
}
private getComponentRef(config: any) {
const injectionTokens = new WeakMap();
injectionTokens.set(DialogComponent, DialogComponent);
const injector = new PortalInjector(this.injector, injectionTokens);
const componentRef = this.domService.attachComponentPortal(DialogComponent, injector);
(componentRef.instance as any).config = extendObject({}, config);
(componentRef.instance as any).afterClosed().subscribe(() => {
componentRef.destroy();
});
return componentRef;
}
}