我有一个具有以下功能的父组件:
@ViewChild('currentTab') currentTab: ChildComponent;
nextTab(): void {
if (this.currentTab.save()) {
this.activeIndex++;
}
}
以及子组件上的以下方法:
save(): boolean {
return this.confirmationService.confirm({
message: 'Are you sure?',
accept: () => true,
reject: () => false
});
}
问题:父组件中的条件语句不等待答案,而是通过执行this.activeIndex++;
变为'true'。我在做什么错了?
谢谢。
答案 0 :(得分:0)
JavaScript 总是同步和单线程。因此,表达式this.currentTab.save()
被解析,if(....)
语句被立即求值。根据PrimeNg source code,confirm(...)
方法触发一个信号以显示弹出对话框,然后返回this
这是一个真实的价值。因此,预计activeIndex
总是会增加。
要获得所需的内容,请在父组件中导入并使用确认服务:
nextTab(): void {
this.confirmationService.confirm({
message: 'Are you sure?',
accept: () => this.activeIndex++,
reject: () => //Do something else
});
}