angular - 更改时输入数字失去焦点
问题描述
我正在尝试使用输入数字增加我的程序的值。出于某种原因,我需要我的值始终等于输入中的值。我的动作基本上就是在做value = inputValue
。
我设法使用 获取我的输入值@ViewChild
,但是每次我更改它的值时,它都会失去焦点,我需要再次单击它。我不知道它为什么会发生以及如何解决它,希望你们能帮助我!(重构不是问题)
以下是我的代码的一个非常简化的版本。
<div *ngFor="let x of (myArray | async)">
<input (input)="myFunction()" [value]="x.value" #myInput type="number">
</div>
@ViewChield('myInput') myInput: ElementRef
myArray: Observable<Array<Object>>;
myFunction() {
this.store.dispatch(new Action(this.myInput.nativeElement.value));
}
解决方案
问题可能是 ngFor 将再次绘制列表元素,除非您在那里设置 trackBy 函数。由于您的 div 已重绘,输入也将如此,这意味着您将失去焦点,因为元素已更改。
https://netbasal.com/angular-2-improve-performance-with-trackby-cc147b5104e5
此外,添加去抖动时间可能是一个好主意,以便除非用户停止输入,否则不会调度操作。
在 *ngFor 中使用 @ViewChild 时,它将访问第一个列表项。@ViewChildren 可用于访问所有项目。
推荐阅读
- javascript - 带有开始和停止按钮的 Google 表格秒表
- flutter - Flutter:删除 ChangeNotifier Boilerplate `notifyListeners()`
- python - 无法将值应用于 Pandas Python 中的数据框
- python - Spacy:如何进行干净的分割?
- python - 从重复的 k 折交叉验证中访问预测
- javascript - 如何在 NodeJS 中将数据批量插入 MySQL?
- python - 查找从叶子到森林中每个节点的所有路径
- c# - 是否可以查明文件是否已从我的 API 完成下载?
- javascript - 你如何正确地声明一个DefinitelyTyped 库中的枚举类型?
- spring-boot - 是否可以将传真集成到 Web 应用程序项目(即 spring boot )?