2016-04-18 6 views
2

は、私がinputidに文字列とlabelforに同じ文字列をバインドしようとしていますplunkerAngular2を使用して、カスタム文字列をidとhtml要素に簡単にバインドする方法はありますか?

import {Component} from 'angular2/core' 

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div *ngFor="#option of myHashMap"> 
     <input type="radio" name="myRadio" id="{{generateId(option['id'])}}"> 
     <label for="{{generateId(option['id'])}}"> 
      {{option['name']}} 
     </label> 
    </div>   
    ` 
}) 
export class App { 

    myHashMap = [{'name': 'myName1', 'id': 'id1'},{'name': 'myName2', 'id': 'id2'}] 

    generateId(key) { 
     return "myKey" + key; 
    } 
} 

次考えてみましょう。しかし、私は実行する

Can't bind to 'for' since it isn't a known native property ("hMap"> 
    <input type="radio" name="myRadio" id=" 

これを達成するための角度2の慣習的な方法はありますか?

答えて

2

id

id="{{someProp}}" 
[id]="someProp" 

のいずれかを使用して結合することができます。

あなたが htmlForfor属性に反映されているプロパティであるため、

[attr.for]="someProp" 
attr.for="{{someProp}}" 
[htmlFor]="someProp" 
htmlFor="{{someProp}}" 

のいずれかを使用する必要がforについては

Properties and Attributes in HTML

Plunker example

+0

* [attr.id] *を実行する必要があります。* [id] *は動作しません。 – Arlo

+0

なぜ機能しないのですか?要素は 'id'プロパティを持っていて、バインディングはうまくいきます(Plunkerのリンクを参照してください) –

+0

うーん、私はまだ動作すると思いますが、** [attr.id] **を使用しなかったとき、生成されたHTMLには、** [id] **を使用すると* ng-reflect-id = "someId" *もありますが、** [attr.id] **を使用するとこの属性は存在しません。しかし、私は何のために反映されているか分からないが。 – Arlo

1

属性値バインドするための正しい方法:idは、すべての要素のプロパティであるため、

[attr.id]="value" 
+0

も参照してください。これはしかしfor' 'では動作しません。 '[attr.for]'はエラーを起こすでしょう – testing

+0

私は '[attr.for]'について間違っていました、それはうまくいきませんでした '[attr.for] = {{myVariable}}'は動作しません'[attr.for] =" myVariable "' – testing

関連する問題