输入数字更改后失去焦点

时间:2019-06-06 10:19:42

标签: angular typescript input

我正在尝试使用输入数字来增加程序的值。由于某些原因,我需要我的值始终等于输入中的值。 我的动作基本上只是在做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));
}

1 个答案:

答案 0 :(得分:0)

问题可能是ngFor将再次绘制列表元素,除非您在其中设置trackBy函数。由于您的div已重绘,因此输入内容也会过多,这意味着您将因为元素已更改而失去焦点。

https://netbasal.com/angular-2-improve-performance-with-trackby-cc147b5104e5

另外,最好增加一个去抖时间,以便在用户停止键入之前不分派动作。

当在* ng中使用@ViewChild时,它将访问第一个列表项。 @ViewChildren可用于访问所有项目。

angular viewChild for dynamic elements inside ngFor