Angular2反应形式和行为主体
我是Angular的新手,无法理解如何使用异步调用更新被动表单 我有一个基于对象模型的反应式表单。表单中的任何更改都会触发HTTP请求,该请求可能会将对象的更新版本作为响应发回。我需要相应地更新表格 我用BehaviorSubject实现了一个类似的东西(这些对象的列表),但不确定如何用表单实现它 编辑:很抱歉没有包含代码。它相当混乱,所以这里是一个总结 以下是我现在拥有的:Angular2反应形式和行为主体,angular,typescript,angular-reactive-forms,angular-forms,angular-observable,Angular,Typescript,Angular Reactive Forms,Angular Forms,Angular Observable,我是Angular的新手,无法理解如何使用异步调用更新被动表单 我有一个基于对象模型的反应式表单。表单中的任何更改都会触发HTTP请求,该请求可能会将对象的更新版本作为响应发回。我需要相应地更新表格 我用BehaviorSubject实现了一个类似的东西(这些对象的列表),但不确定如何用表单实现它 编辑:很抱歉没有包含代码。它相当混乱,所以这里是一个总结 以下是我现在拥有的: export class EditQuestionnaire implements OnInit { ques
export class EditQuestionnaire implements OnInit {
questionnaireForm: FormGroup;
questionnaire: Observable<Questionnaire>;
// constructor with its dependencies omitted
ngOnInit() {
this.questionnaireForm = this.fb.group({
'id': [''],
'submitted': [false],
'questions': this.fb.array(
[]
),
});
this.questionnaire = this.questionnaireService.getQuestionnaireGeneral(); // This is an observable of a BehaviorSubject that gets updated in a service with every call to getQuestionnaire
this.questionnaireService
.getQuestionnaire(this.questionnaire.id)
.subscribe(questionnaire => {
this.questionnaireForm = this.loadQuestionnaire(questionnaire); // loads the questionnaire into the form
});
}
...
}
对某些问题的回答可能会引发后续问题,因此从后端返回一份全新的问卷。我在这里遇到的问题是valueChanges监听器将新问卷识别为一个更改,而我的应用程序陷入了无限的HTTP请求循环中
有没有办法解决这个问题
更新:
我最终使用EventEmitter将收到的问卷对象传递给父组件,在父组件中我重新生成表单。我假设您通过该组件触发来自服务的请求。要从组件更新被动表单对象,可以直接分配它。例如,如果您这样声明您的反应式表单:
this.form = new FormGroup({
name: new FormControl()
})
let name = "Kyle";
this.form.controls.name.value = name;
您可以像这样简单地更新名称:
this.form = new FormGroup({
name: new FormControl()
})
let name = "Kyle";
this.form.controls.name.value = name;
可在此处的角度文档中找到:
您应该使用stackblitz或plunker来展示您试图做的事情。所以其他人可以帮忙you@NitishkumarSingh我很抱歉,这是你的电话号码code@TheHeadRush抱歉,已更新,已撤消codeDownvote。手动更改检测是您所需要的。注入
ChangeDetectorRef
并在需要检测到更改时调用detectChanges
。抱歉,问题本来很模糊,我包含了代码。@aygestan哦,是的,不再是一个noob问题。决定不回答含糊问题的聪明人避免对不相关答案投反对票