Ich versuche, eine Komponente zu erstellen, die mehrere Vorlagen als Eingaben akzeptiert. Dies ist das Beispiel, das ich habe:Mehrere Templates mit mehreren Winkeln an Komponente übergeben
@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>;
}
Wie Sie sehen können, ist es eine ziemlich einfache Komponente, die ich ausprobiere. Diese Komponente akzeptiert einfach die Daten der anzuzeigenden Artikel sowie die Vorlage des Artikels. Diese Komponente kann wie so verwendet werden:
<data-list [itemsData]="data">
<ng-template let-item>
<h1>{{ item.header }}</h1>
<div>{{ item.content }}</div>
</ng-template>
</data-list>
Wie oben gezeigt ich die Vorlage mich vorbei mit ng-content
die dann von den DataListComponent
mit @ContentChild(TemplateRef) itemTemplate: TemplateRef<ElementRef>;
gelesen wird.
Meine Frage ist, ob es möglich ist, mehrere Vorlagen an eine Komponente zu übergeben.
Als ein Beispiel würde man die Vorlage für die Artikel übergeben, aber eine andere Vorlage wird benötigt, falls es der erste Artikel ist. Dies würde bedeuten, dass die Prüfung des ersten Artikels in der DataListComponent
erfolgen würde, aber dann eine Vorlage verwenden, die von der Komponente spezifiziert wurde, die sie verwendet.
Einfaches Beispiel:
Ich kann wie so etwas tun dafür sorgen:
@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>
`
})
jedoch wie so die "Next Template" wird nicht durch die Komponente angegeben Verwenden Sie die DataListComponent
und wird daher immer die gleiche Vorlage sein.
Meintest du 'ngIf'? –
Ja, ich habe die Frage aktualisiert, um besser zu erklären, was ich meine. –