(используется 8 угловых)
У меня сейчас проблема с моим кодом, использующим тему поведения.
Компонент A создает другой компонент B через фабрику компонентов. Теперь компонент A подписывается на компонент B, который знает, когда его удалять. В этом случае, когда есть ошибка в компоненте B, Компонент A изменит свое собственное состояние и вызовет Компонент B.destroy ().
Однако всякий раз, когда я запускаю этот метод, я получаю в журналах сообщение об ошибке
ERROR Error: ViewDestroyedError: Attempt to use a destroyed view: detectChanges
Я отключаю детектор изменений, прежде чем убрать его, но это, похоже, не помогает.
Вот код:
createComponent(): void {
this.logger.debug('Widget: creating component based on type provided in config.');
this.setWidgetLoading(true);
this.componentFactory.createComponent(this.content, this.componentConfig).subscribe((componentRef) => {
this.componentRef = componentRef;
this.componentRef.instance.componentStatus.subscribe((status: Status) => {
this.setComponentStatus(status);
});
}, (error: Error) => {
this.setComponentStatus(StatusFactory.createErrorStatus(error));
this.setWidgetLoading(false);
},
() => {
this.setWidgetLoading(false);
this.logger.debug('Widget: component created based on type provided in config.');
});
}
setComponentStatus(status: Status): void {
case STATUS_TYPE.ERROR:
this.setWidgetLoading(false);
this.componentRef.changeDetectorRef.detach();
this.componentRef.destroy(); //componentRef references the created component B
return;
}
EDIT
вот два метода из компонента B
ngAfterViewChecked(): void {
if (this.config.mode === ENTITY_FORM_MODE.UPDATE && !this.data) {
this.logger.debug('EntityCreationComponent: initialized for update mode but no data provided.');
this.setErrorStatus(ErrorFactory.createError('initialized for update mode but no data provided.'));
}
}
ngOnInit() {
super.ngOnInit();
this.entity = Object.assign(this.entity ? this.entity : {}, EntityFactory.createEntity(this.config.dataConfig.dataType));
this.logger.debug('EntityCreationComponent: initialized.');
}