我有一个表,我想在其中显示一个表行,这是一个组件。而且我还想将数据传递给该组件:
<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'
。
此外,我无法使用@Directive
,因为我想呈现HTML。
如何在没有<my-component></my-component>
标记的情况下呈现<my-component></my-component>
的模板?
其他答案是先前版本的角度。我正在使用Angular 4.3.4。
任何帮助将不胜感激..!
答案 0 :(得分:7)
你需要在下面的选择器中包含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 !!
希望这会有所帮助!!