3

我正在使用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

4

0 回答 0