Попробуйте это вместо этого.
аюсь создать компонент, который принимает несколько шаблонов в качестве входных данных. Вот пример, который я имею:
@Component({
selector: 'data-list',
styles: [
require('./data-list.component.scss')
],
template: `
<ng-template
*ngFor="let item of itemsData"
ngFor let-item [ngForOf]="[item]" [ngForTemplate]="itemTemplate"
></ng-template>
`
})
export class DataListComponent {
@Input() itemsData: any[];
@ContentChild(TemplateRef) itemTemplate: TemplateRef<ElementRef>;
}
Как видите, это довольно простой компонент, который я пробую. Этот компонент просто принимает данные отображаемых элементов, а также шаблон элемента. Этот компонент можно использовать так:
<data-list [itemsData]="data">
<ng-template let-item>
<h1>{{ item.header }}</h1>
<div>{{ item.content }}</div>
</ng-template>
</data-list>
Как показано выше, я передаю шаблон с помощьюng-content
который затем читаетсяDataListComponent
с@ContentChild(TemplateRef) itemTemplate: TemplateRef<ElementRef>;
.
Мой вопрос заключается в том, можно ли передать несколько шаблонов компоненту.
В качестве примера можно передать шаблон для элементов, но в случае, если это первый элемент, необходим другой шаблон. Это будет означать, что проверка первого пункта будет произведена вDataListComponent
но затем используйте шаблон, указанный компонентом, использующим его.
Простой пример:
Я могу сделать что-то вроде этого, чтобы удовлетворить это:
@Component({
selector: 'data-list',
styles: [
require('./data-list.component.scss')
],
template: `
<span *ngFor="let item of itemsData; let i = index" >
<ng-template *ngIf="i > 0; else nextTmpl"
ngFor let-item [ngForOf]="[item]" [ngForTemplate]="itemTemplate"
></ng-template>
</span>
<ng-template #nextTmpl>
Next
</ng-template>
`
})
Как бы то ни было, «Следующий шаблон» не определяется компонентом, использующимDataListComponent
и поэтому всегда будет один и тот же шаблон.