2016-11-28 87 views
0

我想在angular2中创建一个验证器,我需要检查另一个表单域的值。我尝试过两种场景,我试图做到这一点。Angular2验证器依赖于另一个表单域

方案1,表单域看起来是这样的:

Form = this._fb.group({ 
     ansat: ['', [<any>Validators.required]], 
     helbred: ['', this.someValidator('ansat')], 
    }); 

我有上述两个领域,我希望能够检查“安萨特”的值的验证功能“someValidator”。 someValidator看起来是这样的:

someValidator(key: string) { 
    return (group: FormGroup) => { 
     console.log(group); 
     console.log(group.controls[key].value); 
    } 
    } 

在我的功能,工作组包括所有为我formgroup正确的信息,但“控制”是不确定的,这意味着我不能去的“安萨特值

方案。 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

看一看this猛击。 你在正确的轨道上,你必须在helbred控件的验证器中传递实际的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 
    }); 
+0

感谢您的建议!但我有个问题。使用这个我想使字段“helbred”必需如果ansat为0,而不是返回null(有效)。我将如何做到这一点? – Vanquiza

+0

在我发送的调度程序中,someValidator函数可以检查控件的值。看一个简单的例子更新 – Riv

+0

嗯,我会尝试重新翻译。在我的情况下,我必须能够使用条件验证。在“required”的情况下,我想以某种方式返回“Validators.required”。这可能吗? – Vanquiza