2016-11-28 10 views
0

別のフォームフィールドの値を確認する必要があるangular2でバリデータを作成しようとしています。私はこれをしようとしたところで試した2つのシナリオを持っています。別のフォームフィールドに依存する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); 
    } 
    } 

、グループは私のformgroupのためのすべての正しい情報が含まれていますが、「コントロール」は、私が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

plucherをご覧ください。this 正しい軌道に乗っていれば、ansatコントロールの値だけを渡すのではなく、実際のansatコントロールをhelbredコントロールのバリデーターに渡す必要があります。

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

お寄せいただきありがとうございます!私はしかし、質問があります。これを使用して、null(有効)を返す代わりに、ansatが0のIFフィールドを必要なフィールドにする必要があります。どうすればいい? – Vanquiza

+0

私が送ったプランナーで、someValidator関数はコントロールの値をチェックできます。簡単な例のための更新を参照してください – Riv

+0

うーん、私はしようと言い換える。私は、私の場合、一般的に条件検証を使用できる必要があります。 「必須」の場合は、何らかの形で「Validators.required」を返します。これは可能ですか? – Vanquiza

関連する問題