コンポーネントであるテーブル行を表示したいテーブルがあります。また、そのコンポーネントにデータを渡したいです。
<table>
<th>
<td>col 1</td>
<td>col 2</td>
<td>col 3</td>
</th>
<tr>
<my-component [data1]="data1" [data2]="data2"></my-component>
</tr>
<tr *ngFor="let item of list">
{{item}}
</tr>
</table>
my-component
では、HTMLはいくつかの<td></td>
であり、データはdata1
およびdata2
からレンダリングされます。
しかし、それをレンダリングした後、<my-component></my-component>
が原因で私のCSSが壊れ、すべてのmy-component
HTML(テーブル全体の行)が1列目に表示されます。
上記の結果:
<table>
<th>
<td>col 1</td>
<td>col 2</td>
<td>col 3</td>
</th>
<tr>
<my-component>
<td>data1.prop1</td>
<td>data1.prop2</td>
</my-component>
</tr>
<tr *ngFor="let item of list">
{{item}}
</tr>
</table>
私は以下を試しました:
@Component({
selector: '[my-component]',
templateUrl: 'my-component.html'
})
<tr my-component [data1]="data1" [data2]="data2"></tr>
しかし、これはエラーCan't bind to 'data1' since it isn't a known property of 'tr'
になります。
また、HTMLをレンダリングしたいため、@Directive
を使用できません。
<my-component></my-component>
タグなしで<my-component></my-component>
のテンプレートをレンダリングするにはどうすればよいですか?
他の回答はangularの以前のバージョンのものです。私はAngular 4.3.4を使用しています。
助けていただければ幸いです。
以下のようにセレクターにtrも含める必要があります。
@Component({
selector: 'tr[my-component]',
template: `
<td>{{data1.prop1}}</td>
<td>{{data1.prop2}}</td>
<td>{{data2.prop1}}</td>
`
})
export class MyComponent {
@Input() data1;
@Input() data2;
}
これをチェックしてください Plunker !!
お役に立てれば!!