Чтобы добавить проверку к вашему пользовательскому компоненту ввода, вы должны добавить к своим провайдерам следующее:
{
provide: NG_VALIDATORS,
useExisting: forwardRef(() => InputTextComponent),
multi: true
}
Вам необходимо будет реализовать метод по умолчанию в вашем InputTextComponent:
validate(control: AbstractControl): ValidationErrors | null {
return null;
}
Если вы правильно обновили свойство в своем компоненте с именем value , используя метод writeValue (), который вы реализовали с помощью NG_VALUE_ACCESSOR , а затем гарантировали вызов (вы можете сделать это, применив изменениесобытие на входе по умолчанию):
this.propagateChange(this.value);
Наконец, измените ваш вход isRequired на требуемое свойство по умолчанию.
@Input() required: boolean;
Теперь ваша NgModel должна корректно обновиться.
Редактировать: Чтобы избежать использования требуется (однако это правильный путь).В методе проверки поместите следующий код:
validate(control: AbstractControl): ValidationErrors | null {
return this.isRequired && this.value.length === 0 : { required: true } : null;
}
Когда Angular запускает собственную проверку, он вызывает этот метод.Когда этот метод возвращает что-либо, кроме нуля, объект добавляется в свойство errors в FormControl & NgModel.
Это огромная тема, и есть несколько замечательных статей, которые правильно объясняют все это.Однако, как и просили, это должно решить это.