2016-02-05 8 views
17

チェックボックスを動的に作成する必要があります。* ngForを使用してオブジェクトの配列を繰り返し処理しています。ラベルタグにfor属性の値を設定すると問題が発生します。角度は、エラーをスローしていますテンプレート:'for'は既知のネイティブプロパティではないため、バインドできませんangular2

は、それが知られているネイティブのプロパティ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

いただきました!ここで間違って私のコードでは? Angular2最終[for]="xxx"

答えて

21

更新

は正常に動作する必要があります。彼らはforからhtmlForに別名を追加しました。デフォルトでは、角度

はプロパティバインディングを使用していますが、プロパティforlabelありません。 binding属性を使用して明示的に角度指示するには、代わりに使用します。

[attr.for]="someField" 

または

attr.for="{{someField}}" 

代わりに。

htmlForforに反映されているため、これらも機能します。 Angular2 RC.6で

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

これらは今のようにうまく機能する必要がありますので、エイリアスが追加されました:

[for]="someField" 

または

for="{{someField}}" 
+0

をワウ、それは罰金おかげで動作します!単に 'for'の代わりに' attr.for'で 'attr'を使う理由を知っていますか? –

+1

'attr.for'では、属性バインディングが高価であるため、属性バインディングを明示的にオプトインする必要があります。属性はDOMに反映され、変更には、たとえば、この属性セットと一致するCSSセレクタが登録されているかどうかを確認する必要があります。プロパティのバインディングはJSのみで安価なので、デフォルトです。 –

+1

"プロパティのバインディングはJSのみです"。私はそれほど言いません。例えば、頻繁に使用される 'textContent'プロパティなど、対応する属性を持たないプロパティがいくつかあります。これらのプロパティにバインドすると、DOMが更新されます。 –

関連する問題