Angular 中可重用的自定义组件列表
Reusable list of custom components in Angular
我想在 Angular5 中创建可重用的 SortedList 组件。该列表应接受任何列表项(对象)数组作为属性。从 ListContainer 组件我想使用列表并传递一个列表项模板,如下所示:
<div class='list-container'>
<SortedList [items]='getListItems()' [categories]='getSortCategories()' >
<ACustomItem [item]='item'></AcustomItem>
</SortedList
<div>
ACustomItem
将是接受 [item] 的任何组件,html 将因实现而异。
在我的排序列表中,我有:
<div class='sorted-list'>
<div class='sorted-list__header'>
<div class='sorted-list__header-title'>{{title}}</div>
<select [(ngModel)]='selectedCategory' (ngModelChange)='onCategoryChange($event)'>
<option *ngFor='let category of categories' [ngValue]='category.id'>{{category.name}}</option>
</select>
</div>
<div class='sorted-list__body'>
<div *ngFor="let item of data | orderBy: selectedCategory.id ">
<ng-content></ng-content>
</div>
</div>
</div>
以上不工作,这里缺少什么?我假设我需要在此处使用 ng-template
但不确定应如何将其嵌入此处?
我发现 solution and modified it for Angular 5 and your specific components. As ngOutletContext
was removed from version 5 of Angular here 是 stackblitz 中的一个示例。
SortedList 组件模板
<div *ngFor="let item of items">
<template [ngTemplateOutletContext]='{item: item}' [ngTemplateOutlet]="templateVariable"></template>
</div>
SortedList 组件 ts
@Input() items: any[];
@ContentChild(TemplateRef) templateVariable: TemplateRef<any>;
应用组件模板
<app-sorted-list [items]="myItems">
<ng-template let-item="item">
<!--Here can be any component-->
<app-sorted-list-item [item]="item"></app-sorted-list-item>
</ng-template>
</app-sorted-list>
我想在 Angular5 中创建可重用的 SortedList 组件。该列表应接受任何列表项(对象)数组作为属性。从 ListContainer 组件我想使用列表并传递一个列表项模板,如下所示:
<div class='list-container'>
<SortedList [items]='getListItems()' [categories]='getSortCategories()' >
<ACustomItem [item]='item'></AcustomItem>
</SortedList
<div>
ACustomItem
将是接受 [item] 的任何组件,html 将因实现而异。
在我的排序列表中,我有:
<div class='sorted-list'>
<div class='sorted-list__header'>
<div class='sorted-list__header-title'>{{title}}</div>
<select [(ngModel)]='selectedCategory' (ngModelChange)='onCategoryChange($event)'>
<option *ngFor='let category of categories' [ngValue]='category.id'>{{category.name}}</option>
</select>
</div>
<div class='sorted-list__body'>
<div *ngFor="let item of data | orderBy: selectedCategory.id ">
<ng-content></ng-content>
</div>
</div>
</div>
以上不工作,这里缺少什么?我假设我需要在此处使用 ng-template
但不确定应如何将其嵌入此处?
我发现 ngOutletContext
was removed from version 5 of Angular here 是 stackblitz 中的一个示例。
SortedList 组件模板
<div *ngFor="let item of items">
<template [ngTemplateOutletContext]='{item: item}' [ngTemplateOutlet]="templateVariable"></template>
</div>
SortedList 组件 ts
@Input() items: any[];
@ContentChild(TemplateRef) templateVariable: TemplateRef<any>;
应用组件模板
<app-sorted-list [items]="myItems">
<ng-template let-item="item">
<!--Here can be any component-->
<app-sorted-list-item [item]="item"></app-sorted-list-item>
</ng-template>
</app-sorted-list>