CanDeactivate не работает с одноуровневыми модулями, использующими Observable - PullRequest
0 голосов
/ 01 марта 2019

Я реализую 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.7

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...