同様の質問が出されていることは知っていますが、良い答えでは誰も見つかりませんでした。各オプションの値がオブジェクトである角型で選択リストを作成したいと思います。また、私は2ウェイ・データ・バインディングを使用したくありません。例えば私のコンポーネントは、これらのフィールドを持っている場合:角4 - 選択リストのオプション値にオブジェクトを使用する
lUsers: any[] = [ { Name: 'Billy Williams', Gender: 'male' }, { Name: 'Sally Ride', Gender: 'female'} ]; curUser: any;
を、私は私のHTMLテンプレートは、この含まれているしたいと思います:このコードで
<select #selectElem (change)="setNewUser(selectElem.value)"> <option *ngFor="let user of lUsers" [ngValue]="user"> {{user.Name}} </option> </select>
を、しかし、私のsetNewUser()関数は、選択したユーザーの名前の内容を受け、フィールド。なぜそれが特定の分野を選ぶのか、私は分かりません。私は、選択したオプションの "値"を受け取ることを期待しています。これは特にユーザーオブジェクトに設定されています。
このオプションでは、valueの代わりにngValueを使用しました。それはSOの他の提案によるものでした。値を代わりに使用すると、オブジェクトはsetNewUser()が受け取る文字列 '[Object object]'に変換され、無駄です。
私はWindows 10で動作しています。角度4.0.0と@ angular/cli 1.1.2を使用しています。ここでsetNewUser()メソッドは次のとおりです。
setNewUser(user: User): void { console.log(user); this.curUser = user; } // setNewUser()
私はそれに渡されている正確なものだけ両方の私のログを決定し、また、テンプレートにこれを含めています:option
タグのvalue
属性として<pre>{{curUser}}</pre>
OPのコードもあなたの値属性も扱いません。あなたの答えになぜそれが言及されているのか分かりません。さらに、OPはngValueを使用しようとするので、なぜ値プロパティにバインドする必要があるのか説明を追加すると便利です(OPが正しく使用していますか...) – zeroflagL