Я создал этот пользовательский валидатор, чтобы проверить, заканчивается ли электронная почта определенным доменом:
import { AbstractControl } from '@angular/forms';
import { stringify } from '@angular/compiler/src/util';
export function validateEmailDomain(control: AbstractControl)
{
if(!stringify(control.value).endsWith('test.com'))
{
return {response: true};
}
return null;
}
}
Затем я применил его к определенному контролю реагирующей группы форм:
'email': new FormControl('', [Validators.email, validateEmailDomain]),
Этот скрипт хорошо работает.Но у меня есть служба глобальных переменных, в которую я добавляю все свои переменные, используемые в моем проекте, поэтому, когда я продаю его организации или компании, я просто меняю несколько переменных, таких как изображение логотипа, значок, заголовок и домен почтового сервера.вместо того, чтобы переходить к каждому компоненту и изменять его вручную.
Поэтому мне нужно передать службу глобальных переменных пользовательским валидаторам и проверить значение элемента управления, если оно совпадает или нет.
После нескольких поисков переполнения стека я прочитал, что должен преобразовать функцию экспорта в класс, поэтому я сделал следующее:
import { AbstractControl } from '@angular/forms';
import { stringify } from '@angular/compiler/src/util';
import { GlobalVarService } from 'src/app/global-var.service';
export class emailDomain{
constructor(private globalVar: GlobalVarService){}
static validateEmailDomain(control: AbstractControl) {
if (!stringify(control.value).endsWith(this.globalVar.emailDomain)) {
return { response: true };
}
return null;
}
}
и для элемента управления:
'email': new FormControl('', [Validators.email, emailDomain.bind(validateEmailDomain)]),
Этоне работает, так как я получил ошибку undefined validateEmailDomain
в строке выше.