Ваш компонент приложения должен выглядеть следующим образом:
<app-my-child-component formControlName="brand"></app-my-child-component>
Добавить провайдера в компонент, отсутствующий в модуле, и реализовать там методы "ControlValueAccessor".
@Component({
selector: 'app-my-child-component',
templateUrl: './my-child-component.component.html',
styleUrls: ['./my-child-component.component.css'],
providers:
[ {
provide: NG_VALUE_ACCESSOR,
multi: true,
useExisting: forwardRef(() => MyChildComponentComponent),
}],
})
export class MyChildComponentComponent implements ControlValueAccessor {
value: string;
onChange() {}
onTouched() {}
isDisabled: boolean = false;
writeValue(value) {
this.value = value
}
registerOnChange(fn) {
this.onChange = fn
}
registerOnTouched(fn) {
this.onTouched = fn
}
setDisabledState(isDisabled) {
this.isDisabled = isDisabled;
}
}
Нет необходимости в другой формев child component
это будет что-то вроде:
<input
[value]="value"
(input)="onChange($event.target.value)"
(blur)="onTouched()"
[disabled]="isDisabled"
type="text">
Смотрите блиц стека здесь: https://stackblitz.com/edit/angular-formgroup-ccj26w?file=src%2Fapp%2Fmy-child-component%2Fmy-child-component.component.ts