CanDeactivate无法使用Observable处理同级模块

时间:2019-02-28 21:30:31

标签: angular rxjs observable angular-router angular-route-guards

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

0 个答案:

没有答案