base-textarea мне нужно получить доступ к maxLength валидатору даже если длина текста меньше 10. как это сделать?
в каком смысле "получить доступ"?
нужно, чтобы компонент ребенок был в курсе Валидатора - maxLength, независимо будет ли тригериться этот валидатор или нет
т.е просто проверить висит ли он или нет на контроле?
старая тема. нет у ангуляра нормального способа поличить валидаторы https://stackoverflow.com/questions/43838108/get-validators-present-in-formgroup-formcontrol
конечная цель - нужно показывать текущую длину текста, и сколько должна быть длина текста типа: 8 / 10 characters 8 - это количество введенного юзером текста, а 10 - maxLength
хммм, что если создать директиву которая провайдит NG_VALIDATORS, реализовать внутри Validator c maxLength валидатором и вместо того чтобы регистрировать Validators.maxLength(10), вы будете просто ставить директиву на base-textarea? это даст возможность получить валидатор через DI а также все проперти которые вы реализуете например maxLength, т.е ту самую 10. Также вы сможете проверить если вообще этот валидатор висит на компоненте
как связать дерективу и FormGroup control ?
именно не хотелось вмешиваться в html файл, а просто прямиком считывать с Validators.maxLength(10)
formControlName сам регает валидаторы
что бы ошибки валидации регистрировались в форме...
у него прописано получить все сервисы которые NG_VALIDATORS провайдят и добавить в formControl
ну наше дело предложить идею
может найдутся идеи без директивы
вообще по факту вы уже связались с html потому что formControlName это та еще фундервафля под капотом
я конечно могбы сделать типа <base-textarea formControlName="testFormControl" [maxLength]='10' ></base-textarea> но я тогда уже повторяю этот maxlength в двух местах
наследуешь FormControl и творишь что хошь :)
а потом ему этот кастомный контрол во всех парент компонентах юзать
ну обычно контрол за пределы его компонента не вылазит. А вообще это не единственный способ
Обсуждают сегодня