@Component({
selector: 'dynamic',
template: '<ng-template *ngFor="let portal of portals" [cdkPortalOutlet]="portal"></ng-template>',
// entryComponents before Ivy
entryComponents: [Component1, Component2, Component3]
})
class DynamicComponent<T extends BaseComponentClass>() {
portals: ComponentPortal<any>[] = [];
constructor(@Inject(COMPONENTS_TOKEN) components: T[]) {
// Something like this
this.portals = components.map(c => new ComponentPortal(c));
}
}
@NgModule({
declarations: [
DynamicComponent
Component1,
Component2,
Component3,
],
imports: [PortalModule, CommonModule, MyOtherModule]
})
У меня есть компонент, описанный выше, который я создаю динамически, используя ComponentPortal
и cdkPortalOutlet
. Сам DynamicComponent
имеет множество точек и компонентов, которые он создает. Ранее с entryComponents
я бы перечислял каждый компонент, который мог быть загружен в DynamicComponents
выходы. Это работало, как и ожидалось, но теперь после обновления до Ivy и удаления устаревшего entryComponents
это больше не работает. Я создаю DynamicComponent
, и он прекрасно инициализируется, но компоненты внутри DynamicComponent
, похоже, не создаются и вызывают весь DynamicComponent
сбой при его рендеринге. Если я удаляю выходы в DynamicComponent
, то все остальное в DynamicComponent
отображается нормально.
Я думаю, что компоненты зависимости DynamicComponent не разрешаются при его создании. Компоненты зависимости не используются ни в каких других angular компонентах. Я что-то упускаю из-за того, как преобразовать старое поведение entryComponent для работы с Ivy?
EDIT: "buildOptimizer": false
исправляет это, но в идеале хочет оставить это включенным.