加载动态 Reactive Forms ,不等待 http 调用完成
Loading dynamic Reactive Forms , doesn't wait for the http call to complete
我正在尝试根据来自 http 服务的输入加载动态字段表单(它应该提供要加载的字段的元数据以及字段的名称和类型等)。因此,一旦我收到带有表单元数据的 http 响应,我就必须在 ngOnInit() 中动态构建 formGroup。
当我通过来自数据服务的 Observable 对该元数据对象和 return 进行硬编码时,组件会在 ngOnInt 中动态构建表单,但是,一旦我将数据服务的调用移动到 http 服务,页面加载似乎发生在 http 调用响应之前,因此表单不会加载字段。
我首先在控制台上收到以下错误:
ERROR Error: formGroup expects a FormGroup instance. Please pass one in.
我观察到 http 调用最终会响应(比如仅需 11 毫秒),并且基于 .subscribe 函数它创建了 formGroup(现在没有用,因为页面呈现为空白而没有任何字段)。
formGroup = {};
data:Array<FormField>;
form: FormGroup;
ngOnInit() {
// dis --> is the data service
this.dis.getFieldsData().subscribe(respose=>{
this.data=respose;
this.objectProps =
Object.values(this.data)
.map(prop => {
return Object.assign({},{key:prop.name}, prop);
});
for(let prop of Object.values(this.objectProps)) {
this.formGroup[prop.name] = new FormControl(prop || '',
this.mapValidators(prop.validation));
} //below is where the form is assigned the dynamically built formGroup
this.form = new FormGroup(this.formGroup);
});
}
您可以在初始化时创建空 FormGroup
:this.form = new FormGroup({});
然后在事件通过时用控件动态填充此表单:
this.form.addControl('some-key', new FormControl(''));
您可以使用 isFormReady
布尔变量之类的东西。所以在你的 html 中放 *ngIf="isFormReady"
然后在你的组件中
this.form = new FormGroup(this.formGroup);
this.isFormReady = true;
我正在尝试根据来自 http 服务的输入加载动态字段表单(它应该提供要加载的字段的元数据以及字段的名称和类型等)。因此,一旦我收到带有表单元数据的 http 响应,我就必须在 ngOnInit() 中动态构建 formGroup。
当我通过来自数据服务的 Observable 对该元数据对象和 return 进行硬编码时,组件会在 ngOnInt 中动态构建表单,但是,一旦我将数据服务的调用移动到 http 服务,页面加载似乎发生在 http 调用响应之前,因此表单不会加载字段。 我首先在控制台上收到以下错误:
ERROR Error: formGroup expects a FormGroup instance. Please pass one in.
我观察到 http 调用最终会响应(比如仅需 11 毫秒),并且基于 .subscribe 函数它创建了 formGroup(现在没有用,因为页面呈现为空白而没有任何字段)。
formGroup = {};
data:Array<FormField>;
form: FormGroup;
ngOnInit() {
// dis --> is the data service
this.dis.getFieldsData().subscribe(respose=>{
this.data=respose;
this.objectProps =
Object.values(this.data)
.map(prop => {
return Object.assign({},{key:prop.name}, prop);
});
for(let prop of Object.values(this.objectProps)) {
this.formGroup[prop.name] = new FormControl(prop || '',
this.mapValidators(prop.validation));
} //below is where the form is assigned the dynamically built formGroup
this.form = new FormGroup(this.formGroup);
});
}
您可以在初始化时创建空 FormGroup
:this.form = new FormGroup({});
然后在事件通过时用控件动态填充此表单:
this.form.addControl('some-key', new FormControl(''));
您可以使用 isFormReady
布尔变量之类的东西。所以在你的 html 中放 *ngIf="isFormReady"
然后在你的组件中
this.form = new FormGroup(this.formGroup);
this.isFormReady = true;