循环中的 PrimeNg V6 confirmationService
PrimeNg V6 confirmationService in loop
我试图在循环中调用确认服务,但只执行了最后一个调用。有什么我需要改变的吗?
for (let x of y) {
if (conditionIsMet) {
this.confirmationService.confirm({
message: 'Question Text',
header: 'Confirmation',
icon: 'fa fa-refresh',
accept: () => {
//DO Accept Work
},
reject: () => {
//Do Rejection Work
}
});
} else {
//Do something else
}
}
组件是单个实例,因此每次将新实例推送到 ConfirmationService 时,都会覆盖前一个实例。要一个接一个地调用,您需要添加某种方式来等待一个确认完成后再进行下一个调用。
我对此进行了快速测试,并通过创建一个 'confirmationQueue' 数组,然后像这样递归调用该服务来让它工作:
this.confirmQueue = [];
for (let x of y) {
if (conditionIsMet) {
this.confirmQueue.push(x);
} else {
//Do something else
}
this.displayNextConfirm();
}
<snip>
private displayNextConfirm(): void {
if (this.confirmQueue && this.confirmQueue.length > 0) {
setTimeout(() => {
let x = this.confirmQueue[0];
this.confirmQueue = this.confirmQueue.slice(1);
this.confirmationService.confirm({
message: 'Question Text',
header: 'Confirmation',
icon: 'fa fa-refresh',
accept: () => {
//DO Accept Work
this.displayNextConfirm();
},
reject: () => {
//Do Rejection Work
this.displayNextConfirm();
}
});
}, 1);
}
}
(请注意,setTimeout(() => {...}, 1)
允许在服务尝试打开下一个之前清除当前确认对话框。)
显然还有其他方法可以实现这一点,但关键是一次只提交一个对 ConfirmationService 的调用,并等待它完成后再提交下一个。
我试图在循环中调用确认服务,但只执行了最后一个调用。有什么我需要改变的吗?
for (let x of y) {
if (conditionIsMet) {
this.confirmationService.confirm({
message: 'Question Text',
header: 'Confirmation',
icon: 'fa fa-refresh',
accept: () => {
//DO Accept Work
},
reject: () => {
//Do Rejection Work
}
});
} else {
//Do something else
}
}
组件是单个实例,因此每次将新实例推送到 ConfirmationService 时,都会覆盖前一个实例。要一个接一个地调用,您需要添加某种方式来等待一个确认完成后再进行下一个调用。
我对此进行了快速测试,并通过创建一个 'confirmationQueue' 数组,然后像这样递归调用该服务来让它工作:
this.confirmQueue = [];
for (let x of y) {
if (conditionIsMet) {
this.confirmQueue.push(x);
} else {
//Do something else
}
this.displayNextConfirm();
}
<snip>
private displayNextConfirm(): void {
if (this.confirmQueue && this.confirmQueue.length > 0) {
setTimeout(() => {
let x = this.confirmQueue[0];
this.confirmQueue = this.confirmQueue.slice(1);
this.confirmationService.confirm({
message: 'Question Text',
header: 'Confirmation',
icon: 'fa fa-refresh',
accept: () => {
//DO Accept Work
this.displayNextConfirm();
},
reject: () => {
//Do Rejection Work
this.displayNextConfirm();
}
});
}, 1);
}
}
(请注意,setTimeout(() => {...}, 1)
允许在服务尝试打开下一个之前清除当前确认对话框。)
显然还有其他方法可以实现这一点,但关键是一次只提交一个对 ConfirmationService 的调用,并等待它完成后再提交下一个。