2016-08-29 57 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