我的html上有一个输入字段,我需要限制其值 .
我想这样做:
HTML:
<div *ngFor="let option of options">
<input type="text" [ngModel]="option.value" (change)="onChangeValue($event.target.value, option)">
</div>
打字稿:
onChangeValue(valueString: string, option: OptionViewModel) {
var value: number = parseInt(valueString);
// Check some conditions. Simplified code just for example
if (option.value != value && value > 5) {
value = 5;
}
option.value = value;
}
OptionViewModel:
export class OptionViewModel {
public optionId: number;
public description: string;
public pollId: number;
public value?: number;
}
我尝试使用双向绑定,但我的代码依赖于option.value的先前值,并且在进入函数之前使用双向绑定更改变量 .
问题是,有时输入字段没有更新 . 看起来我刚刚第一次工作时需要更改值,所以例如,如果输入6字段正确地更改为5,但是如果我添加0(使其为50),则它不会更正为5 .
我重新编写了代码,它正在运行函数并更改option.value,甚至使用Augury检查对象显示正确的值 .
3 回答
在第二次编辑时,输入元素的内容未更新,因为Angular未检测到任何更改(
option.value
为5,它仍为5) . 以下是强制刷新元素的两种方法 .Method 1 - Replace the option item in the array
您可以通过使用克隆副本替换数组中的选项来强制更新字段,如 this stackblitz 所示:
Method 2 - Use an additional field in the trackBy function
另一种解决方案是在
OptionViewModel
(例如lastModified
)中添加一个附加字段,并在ngFor
指令的trackBy
方法中使用它(参见this stackblitz):嗨尝试改变ng模型双向绑定,就像那样
您还可以尝试创建一个简单的observable,它将为您检查信息 .