angular - ngModelChange 输入上的无限循环
问题描述
我有一个这样的html:
<ng-template [ngSwitchCase]="'textbox'">
<input *ngIf="setting.type==='number'"
[step]="setting.step"
[formControlName]="formName"
[id]="formName"
[type]="setting.type"
[placeholder]="setting.placeholder"
[title]="setting.description"
(ngModelChange)="onChange($event)">
</ng-template>
在控制器上我有 onChange 函数:
onChange(newValue: string) {
if (newValue === undefined)
return;
this.form.get(this.formName).setValue(<any>parseFloat(newValue));
}
当我调试 onChange 函数的这个调用时,我注意到它仍在调用并且真的不知道为什么。我有一个无限循环。
我的角度包:
"@angular/animations": "8.2.7",
"@angular/cli": "8.3.5",
"@angular/common": "8.2.7",
"@angular/compiler": "8.2.7",
"@angular/core": "8.2.7",
"@angular/forms": "8.2.7",
"@angular/platform-browser": "8.2.7",
"@angular/platform-browser-dynamic": "8.2.7",
"@angular/router": "8.2.7",
"@babel/polyfill": "7.6.0",
您知道我的代码可能有什么问题吗?
解决方案
这可能是因为在 onChange 函数中设置了输入值,它再次更改了输入值并再次调用 onChange。这无限地继续下去。
在需要时将其转换为数字,而不是将字符串解析为数字,然后将其设置回控件,这是不必要的。
parseFloat(this.form.get(this.formName).value)
或者
+this.form.get(this.formName).value
在这种情况下,您不需要每次更改值时都将其解析为数字,而是在需要时解析它。
您可以使用上述行之一将输入解析为每次更改时的数字,但不要再次将其设置为相同的控件。
onChange(newValue: string) {
parseFloat(this.form.get(this.formName).value)
}
推荐阅读
- laravel - Laravel - 类别作为 url 段,类别属于许多
- r - 将 Vector 转换为 R 中的单个但非典型字符串
- pandas - 如何根据具有列表值的字典键对数据进行分组?
- mysql - 在mysql的选择查询中使用Mysql函数作为列名
- java - 整数不能被取消引用
- ruby-on-rails - postgres 的对等身份验证失败 - 无法确定密码的设置位置
- openrefine - 如何根据 OpenRefine 中的位置添加字符串字符?
- python-3.x - 我的着色器有错误,不知道如何修复
- javascript - 如何使我的图像仅隐藏在模态框中?
- javascript - if (){}else{} 语句如何执行这两种结果