Я пытаюсь динамически создать дочерний компонент, как здесь: https://angular.io/guide/dynamic-component-loader
Это работает довольно хорошо, моя проблема в том, что мне нужен тип для использования ComponentFactoryResolver.
Нет, я хотел бы, чтобы это было очень расширяемым, и я хотел бы поддерживать любой компонент, который подклассов моего абстрактного базового класса.Я хочу иметь необязательный параметр маршрутизатора, то есть строку, для сопоставления с Компонентом (или запасной вариант).
Теперь я попытался внедрить список {name: string, ctor: Type} в мой хостсоставная часть.Я попробовал это с опцией 'multi':
Providers: [{
provide: EditModalRef,
useValue: {ctor: EditmodalComponent, name: 'DefaultEditModal'},
multi: true
},
{
provide: EditModalRef,
useValue: {ctor: UserEditModalComponent, name: 'UserEditModal'},
multi: true
}]
// Then in my host component:
constructor(private editModals: EditModalRef[]) {
..., которая не работает: "NullInjectorError: StaticInjectorError (AppModule) [EntityComponent -> Array]"
Есть либолее элегантный способ, чем наличие поставщика с 'useValue' и списком всех компонентов?Нет ли способа внедрить в список всех классов подклассы некоторый базовый класс, как в Spring?(Я из бэкэнда).
По сути, я бы хотел, чтобы мои пользователи просто объявили свои компоненты в 'entryComponents' корневого модуля и сопоставили их со строкой.
РЕДАКТИРОВАТЬ: О человек ... после нескольких часов поиска я отправляю это, десять секунд спустя я обнаруживаю, что мне нужно добавить @Inject(EditModalRef)
к месту инъекции ... Все еще оставляя вопрос открытым, пока я ищуболее элегантное, «СУХОЕ» решениеg - я не хочу добавлять компонент в пяти разных местах, таких как «entryComponents», «декларации», а также в «поставщиках» с именем в виде строки.