我试图创建一个接受多个模板作为输入的组件。这是我的例子:角度传递多个模板到组件
@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
,因此将永远是相同的模板。
您的意思是'ngIf'? –
是的,我已经更新了这个问题,试图更好地解释我的意思。 –