はじめに
リアクティブフォームのValidation機能で、カスタマイズできる機能を使って、フォームの入力値が空白文字だけの場合、エラーにするようにします。
実装方法
Angulalr 18で実装していきます。
コンポーネントの作成
空白文字チェックのバリデーションを自作
まず、カスタマイズしたバリデーション機能を作ります。
export function nonEmptyValidator(): ValidatorFn {
return (control: AbstractControl): ValidationErrors | null => {
const isValid = control.value && control.value.trim().length === 0;
return isValid ? {nonEmpty: {value: control.value}} : null;
};
}
ValidatorFnを自作することで、バリデーションをカスタマイズできます。
returnで、ValidationErrorsオブジェクトを返した場合、エラーとなります。
エラーのキーはnonEmptyと設定しています。
自作したバリデーション機能をFormControlに設定
以下のように、自作したバリデーション関数をFormGroupなどで作成するときに、引数として渡すことで、バリデーションを追加できます。
constructor(private fb: FormBuilder) {
this.createForm();
}
createForm() {
this.loginForm = this.fb.group({
email: ['', [Validators.required, nonEmptyValidator()]],
password: ['', [Validators.required, nonEmptyValidator()]]
});
}
テンプレート側でエラーを確認する方法
以下のように、自作したときに、nonEmptyというキーを設定したので、その値で組み込みバリデーションと同じように、参照することができます。
@if (loginForm.get('email')?.errors?.['nonEmpty']) {
<span>emailの空白文字のみの入力は禁止です</span>
}
対応方法としては、以上になります。
まとめ
空白文字のチェックに限らず、バリデーションは自作して設定することができるため、組み込みのバリデーションにないものは、自作していきましょう。