ウェブサイト検索

angular - Angular2でng-contentにスコープデータを渡す


現在のコンポーネントスコープのデータを ng-content ディレクティブに渡すための解決策を探しています。

私は、子コンテンツに渡したいデータを持つ app-table コンポーネントのテンプレートを持っており、このような方法を使っています:

<!-- some html before -->
<table>
    <!-- complex header markup with sorting/filtering support -->

    <tr *ngFor="let item of data">
         <ng-content [value]="item"></ng-content> //how to pass data?
    </tr>
</table>
//some html after

そして、このデータを使用したいページテンプレート:

<app-table>
     <td>{{value.Name}}</td>
     ...
</app-table>

これは可能ですか?

回答 #1

私も同じ問題に直面しました。より明確にするために、あなたの例を動作する形で追加しました。

<!-- some html before -->
<table>
    <!-- complex header markup with sorting/filtering support -->

    <tr *ngFor="let item of data">
      <ng-template [ngTemplateOutlet]="templateRef" [ngTemplateOutletContext]="{$implicit: item}"></ng-template>
    </tr>
</table>
//some html after

コンポーネントでは、templateRef をこのように宣言する必要があります。

export class AppTableComponent {
  ...
  @ContentChild(TemplateRef) templateRef: TemplateRef<any>;

  ...
}

それから、このようにコンポーネントを使用します。

<app-table>
 <ng-template let-item>
     <td>{{item.Name}}</td>
     ...
 </ng-template>
</app-table>

回答 #2

あなたはここで答えを見つけられると思います:Angular 2でバインディングを使ってhtmlをng-contentに渡す方法。

残念ながら、ng-content コンポーネントはドキュメントが不十分です。Angular の GitHub の問題(https://github.com/angular/angular.io/issues/3099)によると、まもなく改善される予定です。

関連記事