所以基本上我有不同问题类型(选择,单选,复选框等)的巨大JSON对象。每个问题导致另一个问题。因此,我为每种类型创建了动态组件,并使用递归来加载它。除了一件事,一切似乎都可以正常工作...
我正在使用 ionChange 事件加载下一个问题
<ion-select okText="Okay" cancelText="Dismiss" placeholder="Select one..." [(ngModel)]="option_selected" (ionChange)="nextQuestion($event.detail.value.question)">
<ion-select-option *ngFor="let option of action.options" [value]="option">{{ option.title }}</ion-select-option>
</ion-select>
在第一次加载时一切正常,但是如果在第二次选择之后进行第二次选择,则会立即触发 ionChange ,而没有任何选择,并且由于未选择,我在下一个问题上遇到了错误还没有
我只是将是否添加到 nextQuestion :
nextQuestion(question) {
if (question) {
this.questionChanged.emit(question);
}
}
但是它不是一个好的解决方案,因为在显示其他组件之前应该完全销毁动态组件,但是似乎事件绑定仍然存在。或者它不是驱逐舰...
onQuestionChanged(question) {
this.container_tab_action.clear();
if (this.componentRef) {
this.componentRef.destroy();
}
let factory;
switch (question.type) {
case 'choice':
factory = this.componentFactoryResolver.resolveComponentFactory(TabsChoiceComponent);
break;
case 'yesno':
factory = this.componentFactoryResolver.resolveComponentFactory(TabsChoiceComponent);
break;
}
if (!factory) {
return;
}
this.componentRef = this.container_tab_action.createComponent(factory);
this.componentRef.instance.question = this.question;
this.componentRef.instance.questionChanged.subscribe(event => this.onQuestionChanged(event));
}