Búsqueda de sitios web

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
    ] }
]