Я хочу, чтобы когда кто-то нажимал кнопку «Назад» в браузере, чтобы предупредить его, а если он нажимает «ОК», я перенаправлю на Домашний компонент. Я использую CanDeactivate Guard и хочу изменить следующее состояние CanDeactivateGuard. Я пытался изменить nextState:
nextState = { root: currentRoute, url: '/' }
, но всегда перенаправлял меня на предыдущий компонент
can-deactivate-guard.service.ts
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
export interface CanComponentDeactivate {
canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;
}
@Injectable({
providedIn: 'root'
})
export class CanDeactivateGuard implements CanDeactivate<CanComponentDeactivate> {
canDeactivate(component: CanComponentDeactivate,
currentRoute: ActivatedRouteSnapshot,
currentState: RouterStateSnapshot,
nextState?: RouterStateSnapshot
): Observable<boolean> | Promise<boolean> | boolean {
nextState = { root: currentRoute, url: '/' }// try this, but dosen't work
return component.canDeactivate();
}
}
Мои компоненты код. pressContinue - это просто логическое значение, если кто-то нажимает кнопку продолжения для следующего компонента.
canDeactivate() {
if (this.pressContinue) {
return true;
} else {
return confirm('Are you sure?');
}
}