angular2 ngfor子组件元素

时间:2017-08-17 11:04:40

标签: angular

我有一个Angular2组件(PropertyComponent),它与一个引导表的每一行的属性选择器一起使用:

<tbody>
  <tr app-property *ngFor="let property of properties" [property]="property"></tr>
</tbody>

我想通过添加基于属性对象内容的类来设置<tr>行的样式。我不能这样做,因为我想将样式逻辑放入PropertyComponent。我可以更改代码以使用组件选择器:

<tbody>
  <app-property *ngFor="let property of properties" [property]="property"></app-property>
</tbody>

并将<tr>标记放入组件模板中,但这会导致格式问题,因为额外的<app-property>标记会围绕表格行。

PropertyComponent包含:

<td>{{property.key}}</td>
<td>{{property.value}}</td>
...

有解决这个问题的好方法吗?

3 个答案:

答案 0 :(得分:2)

基于runs = [row['run'] for i, row in df.iterrows()] var_obj = VariantSampleRun.objects.filter(sample=current_sample, hts_run__in=runs).select_related('variant').order_by('variant') ,您可以使用[ngClass]指令来应用适当的类。这是更新的代码:

property

我已将<table> <tbody *ngFor="let property of properties" app-property [property]="property"> </tbody> </table> 放入*ngFor,它会将每一行放在<tbody>标记中。它可能看起来像一个丑陋的解决方案,但它将为您的案件服务。

我不知道你的<tbody>看起来如何,但我会用最少的代码重新生成它:

PropertyComponent

我使用@Component({ selector: '[app-property]', template: ` <tr [ngClass]="getPropertyRowStyle()"> <td>{{property.key}}</td> <td>{{property.value}}</td> </tr> `, styles: [` .class-one{ color:red; } .class-two{ color:green; } `] }) export class PropertyComponent { @Input() property: any; getPropertyRowStyle(){ // implement your logic here to return the appropriate class. // e.g. if(this.property.key === 'one') { return 'class-one'; } else if(this.property.key === 'two') { return 'class-two'; } } } 方法根据getPropertyRowStyle()值获取[ngClass]。您可以在该方法中实现自己的逻辑。另外,我已根据需要将property标记放在组件中。

以下是工作PLUNKER DEMO

的链接

答案 1 :(得分:2)

听起来你正在寻找HostBinding,它允许你绑定角度组件的父元素中的属性。

@HostBinding('class.some-class') someClass = true;

请注意,将其设置为true将应用它。

答案 2 :(得分:0)

如果我理解你的问题,那就是你要找的:

<tbody>
  <tr *ngFor="let property of properties">
    <app-property [property]="property"></app-property>
  </tr>
</tbody>

这样您就可以访问property代码上的<tr></tr>。所以你可以做这样的事情

<tbody>
  <tr *ngFor="let property of properties" [class.active]="property.name === 'potato">
    <app-property [property]="property"></app-property>
  </tr>
</tbody>