Я использую Angular 9, и у меня есть структура данных следующим образом:
myMap: Map<key: string, value: {component: any, data: string}>
У меня есть 3 элемента на карте, первый атрибут моего объекта значения - тип Компонента. , Я использую его для создания динамически новых компонентов. Например:
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.myMap.get(compName).component);
this.container.clear();
const comp = this.container.createComponent(componentFactory);
Теперь я хочу вызвать функцию созданного компонента. Все компоненты имеют одну общую функцию (например, foo(string)
), но реализованы по-разному в каждом компоненте. Как я могу вызвать эту функцию. Я попытался сделать:
(<this.myMap.get(compName).component>comp.instance).foo('abcd');
Однако у меня есть ошибка компиляции.
Пример моего объекта карты:
myMap: Map<key: string, value: {component: any, data: string}> = [
['compA', {comp: AComponent, data: 'A'}],
['compB', {comp: BComponent, data: 'B'}],
['compC', {comp: CComponent, data: 'C'}]
]
То, как я думал об этом было с 3, если еще такие утверждения, как:
if (compName === 'compA') {
(<compA>comp.instance).foo('abcd');
} else if (compName === 'compB') {
(<compB>comp.instance).foo('abcd');
} else if (compName === 'compC') {
(<compC>comp.instance).foo('abcd');
}
Но это действительно не красиво, есть ли другой способ сделать это?