2017-08-11 10 views
0

は、ドキュメントによると、バリデータは{[key: string]: any}または角度フォームバリデータの結果オブジェクトを取得して使用できますか?

nullだから、それは(anyのための)オブジェクトを返すことができますし、オブジェクトがその検証と間違っているものに完全な情報が含まれていることを意味したオブジェクトを返すことができます。例えば

function validateUserName(c: FormControl) { 
    ... 
    return { 
     'validateUserName': { 
      tooShort: true, 
      spacesExist: true, 
      numbersExist: true 
     } 
    } 
} 

Q:は、それが可能なフォーム・コンポーネント・クラスでそれを使用するために返されたオブジェクトを取得するためのいくつかの方法か?

私たちは確かにこれの代わりに3つのバリデーターを使用できますが、そのような可能性があるかどうかは疑問です。

+2

多分それを試してみませんか? – msanford

+1

'form.errors'を使用すると、バリデータによってすべてのエラーが報告されます。 – n00dl3

答えて

1
control.getError('validateUserName'); 

ます。またcontrol.errorsを使用することができますが、それはお勧めできませんし、私の知る限りAOTコンパイラーがスローされます。

0

これは、Angularsカスタムバリデーターを使用すると非常に可能です。ここで

Angular Docsからの例です:この言ったと

/** A hero's name can't match the given regular expression */ 
export function forbiddenNameValidator(nameRe: RegExp): ValidatorFn { 
    return (control: AbstractControl): {[key: string]: any} => { 
     const forbidden = nameRe.test(control.value); 
     return forbidden ? {'forbiddenName': {value: control.value}} : null; 
    }; 
} 

あなたは、単一のControlに複数の異なるValidatorsを追加する場合、それはへの穀物に対して行くことになるので、エラーは、デフォルトでは配列として返されます特定の入力に対してValidatorを試してみてください。

与えられたコードごとに、1つの入力にtooShortStringValidatorspacesExistValidatornumbersExistValidatorの3つのバリデーターを接続して、それらを再利用できるようにするのが最善の方法です。そのような

使用法:

this.heroForm = new FormGroup({ 
    'userName': new FormControl(this.hero.name, [ 
     Validators.required, 
     tooShortStringValidator(), // <-- Here's how you pass in the custom 
     spacesExistValidator(), 
     numbersExistValidator() 
    ]), 
    'justNoNumbersInput': new FormControl(this.hero.alterEgo, [ 
     Validators.required, 
     numbersExistValidator() 
    ]), 
}); 
関連する問題