Я спроектировал генератор страниц с помощью приложения для настройки, и он отлично работает, генерирует компоненты и отображает их на странице так же хорошо, как и должен.
Но когда я пытаюсь визуализировать новую страницу с новой конфигурацией, я получаю эту ошибку ERROR Error: Cannot insert a destroyed View in a ViewContainer!
сразу, когда служба генератора пытается отобразить первый компонент на странице после очистки страницы.
Конфигурация страниц поступает с pageConfigService
на ngOnInit
в NemoContainerComponent
и появляется ошибка, когда pageGenerator
пытается отобразить WidgetContainerComponent
.
** ОБНОВЛЕНИЕ **
Страница будет сгенерирована после изменения маршрута, все базовые компоненты маршрутов - это NemoContainerComponent
, а при изменении маршрута NemoContainerComponent
уничтожается и создается снова.
** ОБНОВЛЕНИЕ **
Это NemoContainerComponent
:
@Component({
selector: 'nemo-container',
templateUrl: './nemo-container.component.html',
encapsulation: ViewEncapsulation.None
})
export class NemoContainerComponent {
private subscription: Subscription = new Subscription();
@ViewChild(ChildReferenceDirective) childReference: ChildReferenceDirective;
constructor(
private pageGenerator: PageGeneratorService,
private route: ActivatedRoute,
private routeService: RouteService,
private router: Router,
private storeEngine: StoreEngineService,
private pageConfigService: PageConfigService
) {
this.subscription.add(route.params.subscribe((params) => {
this.routeService.setRouteService = params;
}));
let activeRoute = router.url.split('/').join(' ');
document.body.className += ' ' + activeRoute;
}
ngOnInit() {
this.pageGenerator.containerRef = this.childReference.viewReference;
this.subscription.add(this.pageConfigService
.get(this.route.data['value'].page)
.subscribe(data => {
this.pageGenerator.renderNewPageByConfigurationFile(data.json)
}));
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}
WidgetContainerComponent
здесь:
@Widget({
typeName: 'widget-container',
displayName: '',
type: 'parent',
settings: []
})
@Component({
selector: 'widget-container',
templateUrl: "widget-container.component.html",
encapsulation: ViewEncapsulation.None
})
export class WidgetContainerComponent {
@ViewChild(ChildReferenceDirective, { read: ViewContainerRef }) childRef;
get childReference(): ViewContainerRef {
return this.childRef;
}
private data: ObjectInterface = {};
set widgetData(value: ObjectInterface) {
for (let item in value) {
this.data[item] = value[item];
}
}
get widgetData(): ObjectInterface {
return this.data;
}
public id: string = '';
}
** ОБНОВЛЕНИЕ **
угловая версия пакета: 4.4.6
** ОБНОВЛЕНИЕ **
заранее спасибо за помощь:)