0
入力が有効な電子メール形式であるかどうかを確認するカスタムバリデータを作成しています。Angular2でカスタムバリデータを作成する方法
これは私のValidatorクラスです:
export class SignupComponent {
signupForm: FormGroup;
email: AbstractControl;
model: any = {};
response: any;
constructor(fb: FormBuilder, private userService: UserService) {
this.signupForm = fb.group({
'email' : ['', Validators.compose([Validators.required, EmailValidator.getEmailValidator()])]
});
this.email = this.signupForm.controls['email'];
}
そして最後に:HTMLに
<div class="form-group">
<input class="form-control"
[(ngModel)]="model.email"
type="text"
id="name"
placeholder="Enter your email"
[formControl]="signupForm.controls['email']"
>
<div *ngIf="signupForm.controls['email'].errors?.required&& signupForm.controls['email'].touched"
class="alert alert-danger">Email is required</div>
<div *ngIf="signupForm.controls['email'].hasError('invalidChars') && signupForm.controls['email'].touched"
class="alert alert-danger">Please give a valid email address</div>
マイコンポーネント:
import {FormControl} from "@angular/forms";
export class EmailValidator {
static getEmailValidator() {
return function emailValidator(control: FormControl): { [s: string]: boolean } {
if (!control.value.match(/^\[email protected][a-zA-Z_]+?\.[a-zA-Z]{2,3}$/)) {
return {invalidChars: true};
}
}
}
}
私のHTMLは、そのように見えます例外私は得る:
Uncaught (in promise): Error: Error in ./SignupComponent class
SignupComponent - inline template:31:4 caused by: Cannot read property
'match' of undefined TypeError: Cannot read property 'match' of undefined at
emailValidator
私のマッチは未定義で、カスタムバリデーターを実装するにはどうすればよいでしょうか?
control.valueは未定義です。私はページをロードするときにその例外を取得します。 – GaborH
また、フォームにコントロールをバインドする方法についても質問があります。 'form'(ここでは' div'要素)に '[formGroup] =" signupForm "'を付けて 'formControlName =" email "でなくてはいけませんか? バリデータに関しては、単純な特別なチェックではありません: 'if(control.value &&!control.value.match(/^\ w + @ [a-zA-Z _] +?\。[a-zA-Z ] {2,3} $ /)){'解決策ですか? –
それは問題だった、私はそれについて考えなかった。私は(control.value &&!control.value.match(/^\ w + @ [a-zA-Z _] +?\。[a-zA-Z] {2,3} $ /))を追加しました。最初にそれが値を持っていれば、そして、当然のことながら、そのフィールドが手つかずである限り、値はありません。ソリューションで回答を編集した場合は、答えとして受け入れます。 – GaborH