Как использовать ResolveComponentFactory (), но со строкой в качестве ключа
что я пытаюсь сделать:
Используйте что-то похожее на "resolComponentFactory ()", но с идентификатором 'string', чтобы получить фабрики компонентов.Получив, начните использовать метод createComponent (Factory).Пример Plnkr ->введите описание ссылки здесь
В примере вы увидите метод «AddItem»
addItem(componentName:string):void{
let compFactory: ComponentFactory;
switch(componentName){
case "image":
compFactory = this.compFactoryResolver.resolveComponentFactory(PictureBoxWidget);
break;
case "text":
compFactory = this.compFactoryResolver.resolveComponentFactory(TextBoxWidget);
break;
}
//How can I resolve a component based on string
//so I don't need to hard cost list of possible options
this.container.createComponent(compFactory);
}
«CompFactoryResolver: ComponentFactoryResolver» вводится в конструктор.
Как вы заметите, необходимость жесткого кодирования каждой перестановки в операторе switch не идеальна.
Когда я регистрировал ComponentFactoryResolver на консоли, я заметил, что он содержит Map с различными фабриками.
CodegenComponentFactoryResolver {_parent: AppModuleInjector, _factories: Map}
Тем не менее, эта карта является частной и не может быть легко доступна (из того, что я могу сказать).
Есть ли лучшее решение, чем как-то раскрутить мой собственный класс, чтобы получить доступ к этому списку фабрики?
Я видел много сообщений о людях, пытающихся создавать динамические компоненты. Однако часто речь идет о создании компонентов во время выполнения. рассматриваемые здесь компоненты уже предопределены, я застрял, пытаясь получить доступ к фабрикам, используя строку в качестве ключа.
Любые предложения или советы очень ценятся.
Спасибо, любезно.