2016-08-29 103 views
1

我有一個輸入元素綁定到我的組件的屬性,它應該在更改輸入字段中的文本時更新。Angular2事件:keyup退出輸入

到目前爲止我的代碼:

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

的問題是,當我做一個按鍵,該元素失去焦點,意味着我必須再次單擊它繼續打字。

我該如何解決這個問題?我會用錯誤的方法嗎?

UPDATE

updateItem簡單的修改陣列。 (我使用它與火力/ angularfire2 BTW)

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

所以數據本身是:items: FirebaseListObservable<any[]>;和僅包含鍵和name屬性(都是字符串)。

更新2 這不是因爲整個DOM元素被重建,或至少不應該根據the docs(見「改變傳播」)。

回答

1

我假設你正在用*ngFor創建輸入。

如果updateItem()修改了*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 
    } 
    } 
}) 

然後在*ngFor使用itemsCopy

+0

是的,沒錯,我使用* ngFor。似乎合乎邏輯。 關於如何解決這個問題的任何想法? – sandrooco

+0

請提供更多詳情。什麼是'updateItem'。數據如何看起來像'* ngFor'正在迭代。 –

+0

更新了問題,這足夠清楚了嗎?感謝您的幫助。 :) – sandrooco