我正在使用primeng确认服务在我的组件中实现canDeactivate保护,为用户对提示的回答创建一个可观察的。问题是,当我尝试导航到同级路由并单击是提示时,路由器不会重定向到目标页面。如果我使用简单的确认方法,它可以正常工作,但是使用 Promise 或 Observable,它就不能工作并且没有错误。对于其他非同级模块,它正在工作并重定向。
守门员是:
export interface CanComponentDeactivate {
canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;
}
@Injectable()
export class CanDeactivateGuard implements CanDeactivate<CanComponentDeactivate> {
canDeactivate(component: CanComponentDeactivate) {
return component.canDeactivate ? component.canDeactivate() : true;
}
}
我在组件中的实现:
canDeactivate(): Observable<boolean> | Promise<boolean> | boolean {
return Observable.create((observer: Observer<boolean>) => {
this.confirmService.confirm({
accept: () => {
observer.next(true);
observer.complete();
},
reject: () => {
observer.next(false);
observer.complete();
}
});
});
}
如果我像这样实现它,它正在工作。
canDeactivate(): Observable<boolean> | Promise<boolean> | boolean {
return confirm('Are you sure to leave the page?');
}
Angular 的版本是 7.2.7