Код: Выделить всё
// app.component.ts, part 1
export class AppComponent implements OnInit {
protected form = new FormGroup({
ctl: new FormControl(),
arr: new FormArray([]),
});
< /code>
Formgroup может быть отключена через флажок: < /p>
// app.component.ts, part 1
enabledCtl = new FormControl(true);
ngOnInit() {
this.enabledCtl.valueChanges.subscribe((enabled) => {
if (enabled) {
this.form.enable();
} else {
this.form.disable();
}
}
Код: Выделить всё
Enabled
< /code>
Пользовательский элемент управления реализует ControlValueAccessor и не более чем обертка вокруг другой формы: < /p>
// custom-control.component.ts
@Component({
selector: 'custom-control',
imports: [ReactiveFormsModule],
template: '',
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => CustomControlComponent),
multi: true,
},
]
})
export class CustomControlComponent implements ControlValueAccessor {
protected ctl = new FormControl()
// All of the rest is boilerplate.
public writeValue(v: any): void {
this.ctl.setValue(v)
}
public registerOnChange(fn: (...args: unknown[]) => unknown): void {
this.ctl.valueChanges.subscribe(fn as any)
}
protected _onTouched = () => {}
public registerOnTouched(fn: (...args: unknown[]) => unknown): void {
const oldOnOnTouched = this._onTouched
this._onTouched = () => {
oldOnOnTouched()
fn()
}
}
public setDisabledState(isDisabled: boolean): void {
if (isDisabled) {
this.ctl.disable()
} else {
this.ctl.enable()
}
}
}
Однако при проверке статуса форм группы она никогда не меняется: < /p>
Код: Выделить всё
Status: {{ form.disabled ? 'disabled' : 'enabled' }}
@if(form.enabled !== enabledCtl.value) {
[b] but should be {{ enabledCtl.value ? 'enabled' : 'disabled' }}[/b]
}
Status: enabled but should be disabled
The FormGroup’s status updates according to my Ожидания, если я сделаю любое < /em> одно из этих изменений: < /p>
- Я заменяю FormControl на другой формат FormArray и удаляю связывание в HTML < /li>
I Удалить FormArray из форм группы < /li>
In -natural ht -natural ht ht ht ht -wintm ht -wintm ht ht -wintm ht ht -wintm ht -wintm formControlName = "ctl">
Подробнее здесь: https://stackoverflow.com/questions/796 ... marray-and