2016-02-05 102 views
17

我必须创建一个复选框列表动态,所以我用* ngFor迭代对象数组一切正常工作,直到迭代。当我在标签标签中设置for属性的值时,问题就出现了。角有抛出错误:无法绑定到'for',因为它不是已知的本地属性angular2

不能结合“为”,因为它不是一个已知的原生属性angular2

新的错误消息

未处理的承诺拒绝:模板解析错误:无法绑定到'for',因为它不是'label'的已知属性。

<div *ngFor="#batch of batch_array"> 
    <label for="{{batch.id}}"><input type="checkbox" [value]="batch.id" id="{{batch.id}}"  
     (click)="batchSelectedEevent(batch.id)" /> {{batch.batch_name}} 
    </label> 
</div> 

这里是我的plnkr示值误差:http://plnkr.co/edit/aAQfWvHc7h7IBuYzpItO?p=preview

什么是错在我的代码?

回答

21

更新

在Angular2最终[for]="xxx"应该正常工作。他们添加了从forhtmlFor的别名。

角默认使用属性绑定,但label不具有财产for。告诉角度明确使用属性绑定,使用代替:

[attr.for]="someField" 

attr.for="{{someField}}" 

代替。

这些还工作,因为htmlFor是属性for被体现。

[htmlFor]="someField" 
htmlFor="{{someField}}" 

在Angular2 RC.6加入一个别名等等这些现在应该工作以及:

[for]="someField" 

for="{{someField}}" 
+0

哇它工作很好,谢谢!我可以知道为什么要在'attr.for'中使用'attr'而不是简单地'for'? –

+1

对于'attr.for',你必须明确地选择属性绑定,因为属性绑定是昂贵的。属性反映在DOM中,并且需要进行更改以检查是否注册了与此属性集相匹配的CSS选择器。属性绑定只是JS而且便宜,因此是默认值。 –

+1

“属性绑定仅JS”。我不会那么说。有一些属性没有相应的属性 - 例如大量使用的textContent属性 - 所以绑定到这些属性也会导致DOM被更新。 –

相关问题