可以通过在CanDeactivate守卫中使用Promise来解决这个问题。
示例代码如下:
import { Injectable } from '@angular/core';
import { CanDeactivate } from '@angular/router';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class ConfirmDeactivateGuard implements CanDeactivate< any > {
canDeactivate(component: any): Promise<boolean> | boolean {
if (component.hasUnsavedChanges()) {
return confirm('Are you sure you want to leave?');
}
return true;
}
}
在上面的代码中,canDeactivate方法返回一个Promise或boolean值。如果组件有未保存的更改,它将显示一个确认对话框来询问用户是否要离开页面。如果用户单击'取消”按钮,则Promise将返回false并阻止导航。如果用户单击'确定”按钮或未进行任何更改,则Promise将返回true,允许导航继续。