Угловой дочерний компонент ng-invalid

Я создаю пользовательский компонент ввода, который совместим с формами путем реализации ControlValueAccessor, Этот компонент ввода представляет собой композицию из одного или нескольких дочерних входов, но у меня возникают проблемы с получением ng-invalid CSS-класс для распространения на ребенка input элемент.

Мой пользовательский компонент ввода имеет такой шаблон:

<label>Input:</label> <input type="text" [(ngModel)]="value" (blur)="onInputBlur()" />

Класс это:

private _value: any;

public get value(): string {
  return this._value;
}
public set value(newValue) {
  this._value = newValue;
  this.onChangeCallback(this._value);
}
public onInputBlur() {
  this.onTouchedCallback();
}

private onChangeCallback = (x: any) => { };
private onTouchedCallback = () => { };

writeValue(obj: any): void {
  this._value = obj;
}
registerOnChange(fn: any): void {
  this.onChangeCallback = fn;
}
registerOnTouched(fn: any): void {
  this.onTouchedCallback = fn;
}
setDisabledState ? (isDisabled: boolean): void {
}

И я связываюсь с пользовательским компонентом ввода, используя реактивную форму, такую ​​как:

<div [formGroup]="formGroup">
  <my-editor [formControlName]="'myValue'"></my-editor>
</div>

div а также my-editor элементы оба получают ng-invalid класс применяется, но я не могу найти элегантный способ применить этот класс к input элемент.

Вот Stackblitz, показывая проблему. https://stackblitz.com/edit/angular-child-ng-invalid

1 ответ

Я решил вашу проблему, используя приведенную ниже реализацию с использованием 'NgControl', используя этот подход, вы сделаете свой пользовательский ввод модульным, который можно использовать по мере необходимости, пожалуйста, прокомментируйте, если я могу помочь в дальнейшем: https://stackblitz.com/edit/angular-sdrrbj?file=src%2Fapp%2Fapp.component.ts

Другие вопросы по тегам