我正在使用primeng确认服务在我的组件中实现canDeactivate Guard,从而为用户提供提示的可观察值。 问题是,当我尝试导航到同级路由并在提示中单击“是”时,路由器不会重定向到目标页面。如果我使用的是简单的确认方法,则它可以正常工作,但是使用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