ОШИБКА Ошибка: невозможно вставить уничтоженное представление в ViewContainer - PullRequest
0 голосов
/ 27 июня 2018

Я спроектировал генератор страниц с помощью приложения для настройки, и он отлично работает, генерирует компоненты и отображает их на странице так же хорошо, как и должен.

Но когда я пытаюсь визуализировать новую страницу с новой конфигурацией, я получаю эту ошибку 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

** ОБНОВЛЕНИЕ **

заранее спасибо за помощь:)

...