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