Ваш вариант использования был бы действительно простым, если бы вы использовали css или подход на основе лигатуры , но поскольку в вашей библиотеке 1 комп на иконку и у них практически нет общего интерфейса, AFAIK практически существуетневозможно сопоставить строку с соответствующим классом компонента.
Подход, предложенный в комментариях, не сработает, так как angular не будет создавать экземпляры компонентов из очищенного HTML .
Вы можете попробовать следующую идею: вместо передачи имени значка вы можете передать шаблон с нужным значком и встроить его в компонент.Это можно сделать следующим образом:
@Component({
selector: 'foo-header'
})
export class ContentHeaderComponent {
@Input() iconTemplate: TemplateRef<any>;
}
content-header.component.html
<ng-container *ngIf="iconTemplate">
<ng-container [ngTemplateOutlet]="iconTemplate"></ng-container>
</ng-container>
foo.component.html
<foo-header [iconTemplate]="iconRef"></foo-header>
<ng-template #iconRef>
<i-chevron-down></i-foo-icon>
</ng-template>
Другой подход заключается в прямом включении разметки значков в компонент:
@Component({
selector: 'foo-header'
})
export class ContentHeaderComponent {}
content-header.component.html
<ng-content select="[header-icon]"></ng-content>
foo.component.html
<foo-header>
<i-chevron-down header-icon></i-foo-icon>
</foo-header>
Об этих подходах и их плюсах / минусах вы можете прочитать в этой статье .