CanDeactivate не работает с одноуровневыми модулями, использующими Observable

Я внедряю canDeactivate guard в свой компонент, используя службу подтверждения primeng, создавая наблюдаемый для пользователя ответ на приглашение. Проблема заключается в том, что, когда я пытаюсь перейти на одноуровневый маршрут и нажать "Да" на запрос, маршрутизатор не перенаправляет на целевую страницу. Если я использую простой метод подтверждения, он работает правильно, но с 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.0.

0 ответов

Другие вопросы по тегам