angular - ¿Cómo proteger todas las rutas para desactivación [CanDeactivate]?
Me gustaría aplicar un guardia de desactivación para todas las rutas y mantener el control a nivel de componente.
Así que tengo esta clase abstracta:
export abstract class Deactivable {
abstract shouldDeactivate(): Observable<boolean> | Promise<boolean> | boolean;
}
Aquí está el guardia:
export class CanDeactivateService implements CanDeactivate<Component> {
canDeactivate(
component: Component,
currentRoute: ActivatedRouteSnapshot,
currentState: RouterStateSnapshot,
nextState?: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
if(component instanceof Deactivable) {
return component.shouldDeactivate();
}
return true;
}
}
y luego en el componente tengo algo como (observable reemplazado por bool para mayor brevedad):
export class MyComponent extends Deactivable implements... {
///// Deactivable
shouldDeactivate(): boolean {
return false;
}
////////
}
entonces aplico el guardia a la ruta raíz, pero no funciona, parece que shouldDeactivate nunca se llama, ¿Qué está mal?
Edición 1: De hecho, descubrí que el canDeactivate del guardia nunca se llama... ¿Podría ser un error?
Edición 2: Uso:
const routes: Routes=[
{ path: "", canDeactivate: [CanDeactivateService], children: [
//All routes here
] }
]