Проблема, судя по всему, совсем простая но я не могу найти решения. Есть компонент registration-page.component.ts, который просто выводит форму с одним полем - email
import { Component, OnInit } from '@angular/core';
import {FormControl, FormGroup, Validators} from '@angular/forms';
import {EmailExistsValidator} from '../shared/services/my.validators';
@Component({
selector: 'app-registration-page',
templateUrl: './registration-page.component.html',
styleUrls: ['./registration-page.component.css']
})
export class RegistrationPageComponent implements OnInit {
form: FormGroup
constructor() { }
ngOnInit() {
this.form = new FormGroup(
{
email: new FormControl(null, [Validators.required, /*this.emailExistsValidator.validate.bind(this.emailExistsValidator)*/])
});
}
}
Роутинг настроен таким образом, чтобы при перехода на
localhost:4200/registration отображалась форма с полем email.
Для моего пока-что единственного поля, email, мне нужно сделать самописный валидатор, который будет проверять нет ли уже зарегистрированного пользователя с таким адресом. Валидатор я писал по
этому и
этому примерам из официального репозитория ангуляра.
Вот валидатор
import {EmailService} from './email.service';
import {catchError, map} from 'rxjs/operators';
import {AbstractControl, AsyncValidator, ValidationErrors} from '@angular/forms';
import {Observable} from 'rxjs';
import {Injectable} from '@angular/core';
@Injectable({ providedIn: 'root' })
export class EmailExistsValidator implements AsyncValidator {
constructor(private emailService: EmailService) {}
validate(
ctrl: AbstractControl
): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {
return this.emailService.Is_email_exists(ctrl.value).pipe(
map(isTaken => (isTaken ? { uniqueAlterEgo: true } : null)),
catchError(() => null)
);
}
}
По
примеру, на который я сслылался ранее, валидатор нужно заинжектировать - я меняю только одну строку в файле registration-page.component.ts,
constructor() { }
на
constructor(private emailExistsValidator: EmailExistsValidator) { }
и после этого я не могу зайти
localhost:4200/registration - меня редирктит на главную страницу. Ошибок в терминале никаких, вроде-бы, нет.
В чём тут может быть дело?
Я старался свой вопрос не захламлять исходниками, но если для решения проблемы не хватает инфы - пожалуйста, говорите и я добавлю к вопросу дополнительные исходные коды