【发布时间】:2018-03-25 20:24:49
【问题描述】:
我正在研究 Angular 5 应用程序中的反应式表单,表单组。我通过订阅 observable 的 API 获取数据。我的问题是我的 formGroup 在不存在时尝试加载数据并引发异常。我需要确保在 formGroup 初始化之前 loadData() 加载数据。
组件
export class QuestionsComponent implements OnInit {
@Input() questions: QuestionBase<any>[] = [];
@Input() questionsList: QuestionBase<any>[] = [];
@Input() questionsMappedList: QuestionBase<any>[] = [];
form: FormGroup;
private view: BehaviorSubject<QuestionsDataModel>;
private consultationQuestions: QuestionsDataModel;
constructor(private dataService: QuestionsDataService, private router: Router, private session: SessionStorageService, private qcs: QuestionControlService, private questionService: QuestionMappingService) {
}
ngOnInit(): void {
this.view = new BehaviorSubject<QuestionsDataModel>(null);
this.loadData();
this.questions = this.questionService.getQuestions();
//this.questions = this.questionService.getQuestionList(null);
this.form = this.qcs.toFormGroup(this.questions);
}
public loadData():void
{
//filtersLoaded: Promise<boolean>;
var consultationId = this.session.getItem('consultationId');
this.dataService.getQuestions(consultationId)
.subscribe(data =>{
debugger;
this.view.next(data);
this.questionsList = this.questionService.getQuestionList(data);
console.log("dynamic questionsList...", this.questionsList);
});
}
模板
<div>
<form (ngSubmit)="onSubmit()" [formGroup]="form">
<div *ngFor="let question of questions" class="form-row">
<app-question [question]="question" [form]="form"></app-question>
</div>
<div class="form-row">
<button type="submit" [disabled]="!form.valid">Save</button>
</div>
</form>
<div *ngIf="payLoad" class="form-row">
<strong>Saved the following values</strong><br>{{payLoad}}
</div>
</div>
【问题讨论】:
-
获取数据后为什么不直接调用
this.form = this.qcs.toFormGroup(this.questions);,并在模板中将if与*ngIf="form"结合起来? -
我对 Angular 很陌生,如果这样做,我会收到错误 ERROR 错误:formGroup 需要一个 FormGroup 实例。请传入一个。示例:
标签: angular angular-reactive-forms