2016-08-25 42 views
1

我得到了使用另一個「啞」組件呈現單個項目的「啞」列表組件。當我想要將數據傳遞給渲染器時,我的列表組件中必須具有相同的屬性。例如,如果我想爲項目「showTimestamp」布爾屬性我這樣做:Angular 2中的列表項呈現器

list.template.html

<my-item-renderer *ngFor="let item of items" [showTimestamp]="showTimestamp"></my-item-renderer> 

有沒有辦法做一些事情來替代組件模板的一部分嗎?

我願做這樣的事情:

<my-list [items]="items"><ng-content><item-renderer [showTimestamp]="true"></item-renderer></ng-content></my-list> 

所以我的名單得到公正的項目性質和NG-Content獲取已設置showTimestamp變量渲染器。

回答

2

您可以使用模板此:

<my-list [items]="items"> 
    <template><item-renderer [showTimestamp]="true"></item-renderer></template></my-list> 
@Component({ 
    selector: 'my-list', 
    template: ` 
     <template ngFor [ngForOf]="items" [ngForTemplate]="templateRef"></template>` 
}) 
class MyList { 
    @Input() data; 
    constructor(private templateRef:TemplateRef) {} 
} 

參見

+0

當使用您的代碼時,我在運行時得到「沒有TemplateRef提供程序」錯誤。 – NagRock

+0

第二和第三個鏈接使用'@ContentChild(TemplateRef)templateRef:TemplateRef ;'而不是構造函數注入。你可以請嘗試,而不是。這是我自己用過的一段時間。 –

+1

謝謝! '@ContentChild(TemplateRef)templateRef:TemplateRef;'正在工作。 – NagRock