【发布时间】:2019-04-24 22:30:20
【问题描述】:
我有一个输入字段,用户可以在其中输入某物的价格。
当用户输入一个值时,我希望它在四舍五入后显示,然后将更新后的值存储在 ts 文件中的支持模型中。
使用 Angular 管道对此不利,因为管道在一个方向上并且更新的值不会反映在模型上。
因此,为了实现双向,我正在执行以下操作:
<input type="text" [ngModel]="model.rate" (ngModelChange)="model.rate=roundRate($event)" name="rate" />
roundDate 函数如下所示
roundRate(value) {
return Math.round(value);
}
现在,当我输入 5.6、7.8、9.5 等值时,它们都被四舍五入、显示并在模型上分别存储为 6、8 和 10,这是预期的行为。
当我输入 2.1、3.4、5.3 等时,问题就开始了。在这种情况下,roundRate 函数被调用并在四舍五入后返回值。但是屏幕上显示的值仍然是旧值(2.1、3.4、5.3)
我检查了 Chrome 上的 input 元素,发现 ng-reflect-model 属性正在更新为预期值(2、3、5)。
<input _ngcontent-c39="" name="rate" type="text" ng-reflect-name="rate" ng-reflect-model="5" class="ng-valid ng-dirty ng-touched">
有人能解释一下这里发生了什么吗?尽管ng-reflect-model 属性已更新,为什么屏幕仍显示旧值?
感谢您的帮助!
【问题讨论】:
-
你可以用(change)代替(ngModelChange),stackoverflow.com/questions/44840735/…
-
你的代码不是导致无限循环吗?因为您正在重新分配在处理程序中发出事件的源。或者当您重新分配以前的值时可能不会。
-
@SteveRuben,你能解释一下这有什么帮助吗?
-
@AmitChigadani,不,它不会进入无限循环。该事件仅在用户输入内容时触发。在这种情况下,新值会被分配。它等待用户更新它。
-
@Yogesh,看看我的回答是否有帮助。
标签: angular typescript angular2-ngmodel