2016-08-25 9 views
1

私は、単一のアイテムをレンダリングするために別の「ダム」コンポーネントを使用する「ダム」リストコンポーネントを取得しました。レンダラーにデータを渡したいときは、リストコンポーネントに同じプロパティがなければなりません。リストアイテムレンダラーを角度2で表示

list.template.html

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

コンポーネントテンプレートの一部を置き換えるために何かをする方法はあります:たとえば、私はこれを行うには、私が得た項目の「showTimestamp」ブールプロパティを持つようにしたい場合は?

私はこのような何かしたいと思います:

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

だから私のリストは、単に項目のプロパティを取得し、NG-コンテンツに既に設定されている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

2番目と3番目のリンクはコンストラクタインジェクションの代わりに '@ContentChild(TemplateRef)templateRef:TemplateRef:TemplateRef ;'を使用します。代わりにそれを試してみてください。それは私がこれを使っている間はしばらくです。 –

+1

ありがとう! '@ContentChild(TemplateRef)templateRef:TemplateRef;'が動作しています。 – NagRock

関連する問題