2016-07-21 18 views
3

オブジェクトに値をバインドする選択コントロールを作成しようとしています。変更すると、選択したオブジェクトにアクセスできます。角2 RC4 - 選択ngModel遅延更新

フォームに多くの変更があったので、これがユーザーエラーかバグかどうかはわかりません。私はこれまででだのはここ

は次のとおりです。私が起こるたいと思うパートナーはどのようなLink to Plunker

import { Component } from '@angular/core'; 

@Component({ 
    selector: 'my-app', 
    template: ` 
     <h1>My First Angular 2 App</h1> 
     <select (change)="onChange($event)" [(ngModel)]="selected"> 
      <option value=''></option> 
      <option *ngFor="let d of data" [ngValue]="d"> 
      {{d.name}} 
      </option> 
     </select> 
    ` 
}) 
export class AppComponent { 
    diagnostic; 
    selected; 
    data = [ 
    { id: 1 , name: 'query 1', filters: [ 
     { 'filter1': 'material = 1'}, 
     {'filter2': 'plant = 2'} 
     ] 
    }, 
    { id: 2 , name: 'query 2', filters: [ 
     { 'filter1': 'material = 1'}, 
     {'filter2': 'plant = 2'} 
     ] 
    } 
    ]; 

    onChange(event) { 
     console.log(event.target.value); 
     console.log(this.selected); 
    } 
} 

があることonChangeイベントはどちらか、私はそれに選択されたアイテムのオブジェクトの値を渡すことを呼び出されたときメソッドを呼び出すか、ngModelでバインドされたプロパティを使用して選択した値にアクセスします。

//expected 
onChange(event) { 
    console.log(event.target.value) // selected object bound to ngValue 
    console.log(this.selected) // ngModel updated to object bound to selected option 
} 

しかし残念ながら、event.target.valueが対象と作品のthis.selectedソートの文字列バージョンですが、更新された上での背後に常にあります。

これを処理する別の方法や適切な方法はありますか? ngModelの遅延はバグですか?

助けていただけたら幸いです!

答えて

2

次のように選択入力/出力を定義する必要があります

<select [(ngModel)]="selected" (ngModelChange)="onChange()"> 
    <option *ngFor="let d of data" [ngValue]="d"> 
    {{d.name}} 
    </option> 
</select> 

、その後、モデルが正しくプロパティに適用されます。 http://plnkr.co/edit/JGgflTY9LvrDDhqqlSGP?p=preview

例のようngModelとngModelChangeの定義を注文する必要があることに注意してください:)

+0

が完全に動作しますが...私のアプリでそれを試してみましたが、それはいくつかのより多くの周りを果たしたそう...動作しませんでした。問題は、ngModelとngModelChangeの順です。 '(ngModelChange)=" onChange() "[(ngModel)] ="選択済み "は動作しません。関数onChange()は、ngModelが更新される前に呼び出されます。これは私がいつも私が再びそれを変更するときに更新を見ていた理由です。あなたはこれについての注釈であなたの答えを更新できますか?また、Angular Repoに問題を投げます。それがバグでなければ、間違いなくどこかで文書化する必要があります。 – ljaustin

+0

これは既に既知の問題であるようです。私は問題にこのstackoverflowを追加します。 https://github.com/angular/angular/issues/3406 – ljaustin

関連する問題