Было бы хорошо увидеть полный код, но я считаю, что вам нужно создать компонент, который реализует ControlValueAccessor
(как указано в нескольких комментариях), в настоящее время вы пытаетесь использовать элемент div
в качестве элемент управления формой, который не будет работать, вам нужно создать собственный элемент управления формой и внедрить редактор в этом компоненте (см. https://alligator.io/angular/custom-form-control/).
Ваш компонент должен выглядеть примерно так:
@Component({
selector: 'my-component',
...,
providers: [
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => MyComponent), multi: true }
]
})
export class MyComponent implements OnInit, ControlValueAccessor {
@Input() disabled = false;
theModel: string;
onChange: (value: string) => {};
onTouched: () => {};
...
writeValue(value: string): void {
// allows angular to bind to the model (theModel)
this.theModel = value;
this.onChange(this.value);
}
registerOnChange(fn: (value: string) => void): void {
this.onChange = fn;
}
registerOnTouched(fn: () => void): void {
this.onTouched = fn;
}
setDisabledState(isDisabled: boolean): void {
this.disabled = isDisabled;
}
}
Ваш HTML-шаблон сформирует шаблон этого компонента, и вы можете добавить свою привязку к событию change
, как вы это делаете в настоящее время, в своем событии изменения вы бы позвонили this.onChange(value)
, чтобы вызвать обновление модели
Тогда вы будете использовать form
в родительском компоненте и установить formControlName
на my-component
.
Шаблон родительского компонента:
<!-- where myEditor is the name of the form control in your FormGroup -->
<my-component formControlName="myEditor"></my-component>
Надеюсь, это поможет