2016-08-29 3 views
1

私は、入力フィールドのテキストを変更するときに更新する必要がある、コンポーネントのプロパティにバインドされた入力エレメントを持っています。これまでAngular2イベント:keyupが入力を終了する

マイコード:

<input type="text" #updatetext [value]="item.name" (keyup)="updateItem(item.$key, updatetext.value)" /> 

問題は、私はキーストロークを行うとき、要素は、フォーカスを失った私はタイピングを続けるために再びそれをクリックしなければならないことを意味ということです。

どうすればこの問題を解決できますか?間違ったアプローチをしていますか?

UPDATE

updateItemは、単に配列を変更します。 (私はところでfirebase/angularfire2でそれを使用しています)

updateItem(key: string, newText: string) { 
    this.items.update(key, { name: newText }); 
} 

ので、データ自体は次のとおりです(両方とも文字列で)items: FirebaseListObservable<any[]>;のみ、キーと名前のプロパティで構成されています。

アップデート2 全体DOM要素が再作成される、または少なくともthe docsに応じてはならないので、それはありません(「変更の伝播」を参照)。

答えて

1

*ngForで入力を作成するとします。

*ngForが繰り返す配列が変更された場合、要素が再作成される可能性があります。そのため、要素がフォーカスを失う(別の要素になります)ためです。

シンプルバージョン(正確に自分のデータで何が起こっているかに応じて、これは動作しない場合があります)

items.subscribe(response => { 
    for(item in response) { 
    var found = this.itemsCopy.find((copy) => copy.name == item.name); 
    if(found.length) { 
     found[0].value = item.value 
    } 
    } 
}) 

その後*ngForitemsCopyを使用しています。

+0

はい、そうです、私は* ngForを使用しています。論理的ですね。 これをどのように修正することができますか? – sandrooco

+0

詳細を入力してください。 'updateItem'は何をしていますか? '* ngFor'のようなデータはどのように反復処理されていますか? –

+0

質問が更新されました。これは十分ですか?助けてくれてありがとう。 :) – sandrooco

関連する問題