У меня проблемы с включением и отключением элементов управления формой в моем приложении. Вероятно, это связано с тем, что форма включается / отключается в асинхронном контексте.
Вот как выглядит код.
user.component.html
<form [formGroup]="form">
<input type="text" id="name" formControlName="name" />
<input type="text" id="age" formControlName="age" />
</form>
user.component.ts
ngOnInit() {
this._route.queryParams.subscribe(params => {
getUser(params.userId).subscribe(user => {
this._buildForm(user);
})
});
}
private _buildForm(user){
this.form = _fb.group({
name: [{value: user.name, disabled: user.someCondition}, Validators.required],
age: [{value: user.age, disabled: user.anotherCondition}, Validators.required]
})
}
Когда пользователь впервые загружается при изменении параметра, элементы управления включаются / отключаются в зависимости от их соответствующих условий. При последующем изменении параметров состояние элементов управления остается прежним, хотя значения установлены соответствующим образом.
Я пробовал разные способы исправить это, но без помощи. Например, я попробовал следующее в конце метода _buildForm
.
this.form.disable() //Doesn't do anything
this.form.controls.name.disable(); //Doesn't help
Одна вещь, которая работает как положено, заключается в следующем (но это не то, что требуется).
<button (click)="form.disable()" value="Disable Form" />
<button (click)="form.enable()" value="Enable Form" />
Мне кажется, что проблема в том, что _buildForm()
вызывается из асинхронного контекста (метод подписки).
Как я могу исправить эту проблему?
UPDATE
Обратите внимание, что подписка Observable запускается на основе навигации, как показано ниже.
this._router.navigate([], {
relativeTo: this._route,
queryParams: {userId: 10}
})
ОБНОВЛЕНИЕ 2
https://angular -cvf1fp.stackblitz.io
Это более простой способ понять мою проблему