2016-06-29 7 views
1

入力が正の数であることを確認する組み込みのバリデータがある場合は、情報を見つけようとしていましたか?正の数のカスタム検証

私は次のように構築しようとした

static nonZero(control:Control) { 
    if (Number(control.value) < 0) { 
     control.setErrors({nonZero: true}) 
    } else { 
    control.setErrors(null) 
    } 
} 

しかし、私は私のフォームビルダでそれを使用する方法を知りませんでした:私は間違っ

this.form = _formBuilder.group({ 
      field:['', Validators.required]}) 

何をしているのですか?

答えて

1

あなたは、このようValidators.compose方法を活用することで、それを構成することができます:これは、フィールドのためのあなたの2つの同期のバリデータを定義することができます

this.form = _formBuilder.group({ 
     field:['', Validators.compose([ 
        Validators.required, nonZero ]) 
     ]}); 

編集

私はバリデータをこのように実装します:

static nonZero(control:Control):{ [key: string]: any; } { 
    if (Number(control.value) < 0) { 
    return {nonZero: true}; 
    } else { 
    return null; 
    } 
} 
+0

実は、これは次のエラー私をスロー:[: '(コントロール)=>無効(コントロール)[]' 型「ValidatorFnのパラメータに割り当てられない型の引数は、 ] '。 タイプ '(control:Control)=>' void 'はタイプ' ValidatorFn 'に割り当てられません。 タイプ 'void'はタイプ '{[key:string]:any; } '。 – uksz

+0

実際、私はバリデータを少し違って実装します。私は私の答えを更新しました... –

0

を私はあなたがあまりにも1を渡すことができ、同じコンの方法論を使用しますが、min関数を実装すると思います。

import { ValidatorFn, AbstractControl } from '@angular/forms'; 
export function min(min: Number): ValidatorFn { 
    return (control: AbstractControl): {[key: string]: any} => { 
     const input = control.value, 
      isValid = input < min; 
     if(isValid) 
      return { 'minValue': {min} } 
     else 
      return null; 
    }; 
} 


this.pnFG = this.fb.group({ 
    pageNumberInput: [this.pageNumber, 
        Validators.compose([ 
         Validators.required, 
         min(1) 
        ]) 
        ] 
});