Есть родительский компонент с формой:
<form [formGroup]="authFormGroup">
<p>
<small class="title">Логин</small>
<app-input [phone]="true" formControlName="login"></app-input>
<small class="error">Введите корректный логин</small>
</p>
</form>
В котором создается форма и добавляется FormControl:
this.authFormGroup = new FormGroup({
'login': new FormControl('', [Validators.required, Validators.minLength(5)])
})
login FormControl - это отдельный текстовый компонент, которому я написал код, чтобы он работал, как FormControl.
@Component({
selector: 'app-input',
templateUrl: './input.component.html',
styleUrls: ['./input.component.sass'],
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => InputComponent),
multi: true
}
]
})
export class InputComponent implements OnInit, ControlValueAccessor {
@Input('phone') isShowingPhone: boolean = false
value: string = ''
constructor() {
}
onChange: any = () => { };
onTouched: any = () => { };
writeValue(value: string): void {
this.value = value
}
registerOnChange(fn: any): void {
this.onChange = fn
}
registerOnTouched(fn: any): void {
this.onTouched = fn
}
ngOnInit(): void {
}
update(): void {
this.onChange(this.value)
}
}
И все работает, за исключением валидаторов. Элементу input внутри моего app-input компонента добавляется ng-touched и ng-dirty, но как можно добавить ему ng-invalid, если валидаторы из form group сработали?