Angular2验证器依赖于另一个表单字段

时间:2016-11-28 21:27:17

标签: forms validation angular angular2-forms

我正在尝试在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”的值。我该怎么做?

非常感谢任何帮助!

1 个答案:

答案 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
    });