我正在尝试使用输入数字来增加程序的值。由于某些原因,我需要我的值始终等于输入中的值。
我的动作基本上只是在做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));
}
答案 0 :(得分:0)
问题可能是ngFor将再次绘制列表元素,除非您在其中设置trackBy函数。由于您的div已重绘,因此输入内容也会过多,这意味着您将因为元素已更改而失去焦点。
https://netbasal.com/angular-2-improve-performance-with-trackby-cc147b5104e5
另外,最好增加一个去抖时间,以便在用户停止键入之前不分派动作。
当在* ng中使用@ViewChild时,它将访问第一个列表项。 @ViewChildren可用于访问所有项目。