Assume DynamicFormService.getAnswers('CAR00PR')
is asynchronous(probably it is), using async Pipe
to pass asynchronous result is on the right way, but you cannot expect to get the asynchronous result right now when DynamicFormComponent
is created(at ngOnInit) because of Asynchonous. The result isn’t ready yet when running your below line of code.
this.form = this.qcs.toFormGroup(this.answers);
There are several ways that can fix your problem.
1. listen to valueChange of @Input() answers
at ngOnChanges
lifehook.
ngOnChanges(changes) {
if (changes.answers) {
// deal with asynchronous Observable result
this.form = this.qcs.toFormGroup(changes.answers.currentValue);
}
}
2. pass Observable directly into DynamicFormComponent
and subscribe to it to listen to it’s result.
online-quote.component.html:
<app-dynamic-form [answers]="answers$"></app-dynamic-form>
dynamic-form.component.ts:
@Component({
...
})
export class DynamicFormComponent implements OnInit {
@Input() answers: Observable<AnswerBase[]>;
ngOnInit() {
this.answers.subscribe(val => {
// deal with asynchronous Observable result
this.form = this.qcs.toFormGroup(this.answers);
})
}