#angular #dependency-injection #directive
Вопрос:
В документации говорится: «Angular признает роль директивы в процессе проверки, поскольку директива регистрируется у поставщика NG_VALIDATORS».
@Directive({
selector: '[appForbiddenName]',
providers: [{provide: NG_VALIDATORS, useExisting: ForbiddenValidatorDirective, multi: true}]
})
export class ForbiddenValidatorDirective implements Validator {
@Input('appForbiddenName') forbiddenName = '';
validate(control: AbstractControl): ValidationErrors | null {
return this.forbiddenName ? forbiddenNameValidator(new RegExp(this.forbiddenName, 'i'))(control)
: null;
}
}
Как я понял механизм DI, поле «поставщики» в метаданных @Directive-это место, где директива выглядит, если ее код ссылается на соответствующий инъекционный токен.
И в примере мы предоставляем наш экземпляр директивы для токена NG_VALIDATORS, поэтому каждый раз, когда наша директива ссылается на NG_VALIDATORS, она получит собственный экземпляр.
Таким образом, возникает вопрос — где и когда наша директива использует поставщика и как директива FormControl знает о нашей пользовательской функции проверки?