【发布时间】:2019-01-24 09:44:11
【问题描述】:
我正在使用角度反应形式并制作距离输入字段,其中有两个输入框,分别称为 From 和 To。
HTML:
<form [formGroup]="form">
<button (click)="addRow()">Add</button>
<div formArrayName="distance">
<div
*ngFor="let item of form.get('distance').controls; let i = index"
[formGroupName]="i"
style="display: flex"
>
<input type="number" placeholder="From" formControlName="from" />
<div><input type="number" placeholder="To" formControlName="to" /></div>
</div>
</div>
<br /><br />
<button type="submit" [disabled]="!form.valid">Submit</button>
</form>
TypeScript:
ngOnInit() {
this.form = this.fb.group({
distance: this.fb.array([]),
});
this.addRow()
}
addRow() {
const control = this.form.controls.distance as FormArray;
control.push(this.fb.group({
from: ['',Validators.required],
to: ['',Validators.required]
}));
}
这里你可以看到两个输入框默认为from和to。
顶部有一个添加按钮,点击添加按钮后,具有相同输入字段的行将被添加并形成数组。
这里我需要限制用户不应该允许输入上一行到值,也不能小于该值。
例如,
在第一行,如果用户分别为 from 和 to 输入以下值,例如 0 和 5,
"distance": [
{
"from": 0,
"to": 5
}
]
点击添加后,在From输入框的第二行,用户需要被限制添加5和小于5的值(这意味着这些值已经输入了)。
所以这样是无效的,
{
"distance": [
{
"from": 0,
"to": 5
},
{
"from": 5,
"to": 10
}
]
}
这里"from": 5, 或"from": 4(or)3(or)2(or)1,第二行的任何内容都无效..
只有 6 和大于 6 才有效。
同样,对于每一行,它需要检查前一行的值并进行验证。
请帮助我实现这种类型的验证,即限制用户不输入前一行的值(或)小于当前行的值。
工作示例: https://stackblitz.com/edit/disable-group-control-value-on-another-control-value-for-j58atx
编辑:
尝试输入更改,例如,
<input type="number" (input)="onInputChange($event.target.value)" placeholder="From" formControlName="from">
在链接https://stackblitz.com/edit/disable-group-control-value-on-another-control-value-for-ymfpkj 但不确定我是否正确..
如果此程序错误,请更改。
【问题讨论】:
标签: javascript angular typescript validation angular-reactive-forms