我正在尝试在angular2中创建一个验证器,我需要检查另一个表单字段的值。我尝试过两次尝试的方案。
场景1,表单字段如下所示:
Form = this._fb.group({
ansat: ['', [<any>Validators.required]],
helbred: ['', this.someValidator('ansat')],
});
我上面有两个字段,我希望能够在验证器函数“someValidator”中检查“ansat”的值。 someValidator看起来像这样:
someValidator(key: string) {
return (group: FormGroup) => {
console.log(group);
console.log(group.controls[key].value);
}
}
在我的函数中,group包含我的formgroup的所有正确信息,但是“controls”是未定义的,这意味着我无法获得“ansat”的值。
场景2,表单字段如下所示:
this.myForm = this._fb.group({
ansat: ['', [<any>Validators.required]],
helbred: ['', c => Validators.compose([
this.someValidator(c,
group => group.controls['ansat'].value === 0
),
])]
});
这是我的someValidator功能:
conditional(c, conditional) {
console.log(conditional);
console.log(c);
if(c.parent != undefined || c._parent != undefined){
if(c._parent.controls['ansat'].value === 0){
console.log(c._parent.controls['ansat'].value);
}
}
return null;
}
在这种情况下,控件“c”具有正确的信息并包含一个父级,它是分配给它的组,但是我无法访问它以尝试将它的兄弟放在同一组中。
在条件参数的情况下,我尝试通过一个我无法工作的函数发送组。
问题:我希望能够在我调用“helbred”的验证器中访问“ansat”的值。我该怎么做?
非常感谢任何帮助!
答案 0 :(得分:1)
看看this plunker。 您已经走上正轨,您必须在helbred control的验证器中传递实际的ansat控件,而不是仅传递ansat控件的值。
ansat: AbstractControl = new FormControl('', Validators.required);
helbred: AbstractControl = new FormControl('', Validators.required, this.someValidator(this.ansat));
this.myForm = this.formBuilder.group({
ansat: this.ansat,
helbred: this.helbred
});