【问题标题】:Can't bind to 'for' since it isn't a known native property angular2无法绑定到“for”,因为它不是已知的原生属性 angular2
【发布时间】:2016-05-15 18:33:24
【问题描述】:

我必须动态创建一个复选框列表,所以我使用 *ngFor 来迭代对象数组,在迭代之前一切正常。当我在标签标签中设置for 属性的值时,就会出现问题。角度已经抛出错误:

无法绑定到“for”,因为它不是已知的原生属性 angular2

新的错误信息

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

<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

我的代码有什么问题?

【问题讨论】:

    标签: angular


    【解决方案1】:

    更新

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

    原创

    Angular 默认使用属性绑定,但label 没有属性for。要明确告诉 Angular 使用属性绑定,请改用:

    [attr.for]="someField"
    

    attr.for="{{someField}}"
    

    改为。

    这些也有效,因为htmlForfor 反映到的属性。

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

    在 Angular2 RC.6 中添加了一个别名,因此这些现在应该也可以工作了:

    [for]="someField" 
    

    for="{{someField}}" 
    

    【讨论】:

    • 哇,它工作得很好,谢谢!我可以知道为什么在attr.for 中使用attr 而不是简单的for 吗?
    • 使用attr.for,您必须明确选择加入属性绑定,因为属性绑定很昂贵。属性反映在 DOM 中,并且更改需要例如检查是否注册了与此属性集匹配的 CSS 选择器。属性绑定仅是 JS 且便宜,因此是默认值。
    • “属性绑定仅限 JS”。我不会这么说。有一些属性没有相应的属性——例如,大量使用的 textContent 属性——因此绑定到这些属性也会导致 DOM 被更新。
    • 嗯,我会说这是一个副作用,但与属性绑定本身没有直接关系。它是元素在获取通过属性传递的数据时调用的功能。尽管如此,还是要注意有趣的方面。
    猜你喜欢
    • 2016-10-03
    • 2017-09-01
    • 2017-02-26
    • 2017-02-27
    • 2016-11-13
    • 2021-09-15
    • 2016-12-30
    • 2017-06-21
    • 2016-12-21
    相关资源
    最近更新 更多