2017-04-18 6 views
0

私はAngular2 ForumBulderを使用してフォームを作成し、バリデーションを追加しています。コンポーネントのサンプルコードの下にAngular2:2フィールドの共通検証としてValidators.requiredを設定する

this.OtpForm = this._fb.group({ 
    otpInput: this._fb.group({ 
     otpInput1: ['', Validators.required], 
     otpInput2: ['', Validators.required], 
     otpInput3: ['', Validators.required], 
    }, { validator: this.numericValidator }) 
}); 

これで正常に動作します。しかし、質問はどのようにカスタムバリデーターnumericValidatorのようにすべてのフィールドに共通のValidators.requiredする方法ですか?

答えて

3

あなたは、たとえば、

validateAllRequired(g: FormGroup) { 
    let ctrls = g.controls; 
    let keys = Object.keys(ctrls); 
    let valid = true; 
    keys.forEach((key) => { 
     let ctrl = ctrls[key]; 
     if (ctrl.value.trim() == '') { 
     valid = false; 
     } 
    }); 
    return valid ? null : { 
     validateAllRequired: { 
     valid: valid 
     } 
    }; 
} 

をotpInputグループに1つの以上のカスタムバリデータを作成し、これに追加することができます:

otpInput: this._fb.group({ 
    otpInput1: [''], 
    otpInput2: [''], 
    otpInput3: [''], 
}, { validator: Validators.compose([this.numericValidator, this.validateAllRequired]) }) 

がValidators.composeを使用してバリデータを組み合わせて()

Validators.compose([...]) 
非同期検証ツール用の

を使用

Validators.composeAsync([...]) 
+0

お返事ありがとうございます。私は 'validateAllRequired'は' this.validateAllRequired'と呼ばれる必要があると思います。正しい?? –

+0

現在のクラスで 'validateAllRequired'を定義していれば、' this'を使う必要があります。そうでなければ、この関数を再利用する場所を定義できます。 'this'は必要ありません。他のファイルであるので、この関数をインポートして使用することができます。 –

+0

問題のコンポーネントは一般的なものなので、現在のクラス自体に関数を保持します。今私は '{validator:[this.numericValidator、this.numericValidator、this.validateAllRequired]}'のような両方のカスタムバリデータを添付すると、エラーが発生しています: 'this.validatorは関数ではありません。このエラーに関する提案はありますか? –

関連する問題