Я использую angular cdk ovelay для открытия диалога.
Вот код
openDialog(component: any, dialogConfig: DialogConfig): any {
const config = new OverlayConfig();
config.height = dialogConfig.height;
config.width = dialogConfig.width;
config.positionStrategy = this.overlay.position().global().centerHorizontally().centerVertically();
config.hasBackdrop = true;
config.backdropClass = dialogConfig.backdropClass;
const componentOverlayRef = this.overlay.create(config);
const componentPortal = new ComponentPortal(component);
const componentRef = componentOverlayRef.attach(componentPortal);
componentOverlayRef.backdropClick().subscribe(() => {
componentOverlayRef.dispose();
});
return componentRef;
}
И вот как я его использую
const _dialogConfig = new DialogConfig({
backdropClass: "dialog-backdrop"
});
const _componentRef: any = this.openDialog(MyComponent, _dialogConfig);
const _componentInstanceRef: MyComponent= _componentRef.instance;
_componentInstanceRef.id= 10;
_componentRef.changeDetectorRef.detectChanges();
В моем компоненте id - это @Input
, и я использую ngOnChanges
для прослушивания изменений в id.
Но ngOnChanges не вызывается даже после того, как я использовал
_componentRef.changeDetectorRef.detectChanges();
what в чем проблема? Или как-нибудь иначе?