Angular2反应形式和行为主体

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

我是Angular的新手,无法理解如何使用异步调用更新被动表单

我有一个基于对象模型的反应式表单。表单中的任何更改都会触发HTTP请求,该请求可能会将对象的更新版本作为响应发回。我需要相应地更新表格

我用BehaviorSubject实现了一个类似的东西(这些对象的列表),但不确定如何用表单实现它

编辑:很抱歉没有包含代码。它相当混乱,所以这里是一个总结

以下是我现在拥有的:

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问题。决定不回答含糊问题的聪明人避免对不相关答案投反对票