Один из подходов - использовать ng-template
. Вы можете определить шаблон для каждого элемента в родительском компоненте и отобразить шаблон в дочернем компоненте для каждого элемента в массиве:
Родительский компонент:
<suggestion-list (suggestionSelected)="selectSuggestion($event)"
[suggestions]="$suggestionSource | async"
[suggestionTemplate]="suggestionTemplate">
</suggestion-list>
<ng-template #suggestionTemplate let-suggestion>
<span>{{suggestion.firstname + ' ' + suggestion.lastname}}</span>
</ng-template>
А в вашем дочернем компоненте вы можете просто сделать (обратите внимание, что мы пропускаем предложение var в шаблоне через неявный контекст ng-template
:
<ng-container *ngFor="let suggestion of suggestions>
<ng-container *ngTemplateOutlet="suggestionTemplate; context: {$implicit: suggestion}"></ng-container>
</ng-container>
В файле .ts дочернего компонента вы объявляете переданный шаблон следующим образом:
@Input() suggestionTemplate: TemplateRef<any>;
PS: я написал этот код прямо сейчас, поэтому он не тестируется, но я думаю, что вы можете понять, что вы можете сделать!