Quiero hacer algo como esto en mi routing.module.ts (ver líneas marcadas por -->)
export const routes: Routes = [ path: 'test/:action', component: CreateComponent, --> canActivate: ':action' == 'read' ? [Guard1] : [Guard1, Guard2], data: { --> screenAction: ':action' == 'read' ? 'read' : ':action', } ]Tengo que usar la variable: acción porque se usa más tarde en el parámetro del enrutador. Gracias por tu ayuda !
Bueno, lo que pides es posible, pero implementarlo puede ser un poco complejo.
En primer lugar, debe definir varias rutas en lugar de 1. Donde puede aplicar las condiciones que necesita.
const routes: Routes = [ { path: '', redirectTo: '/home', pathMatch: 'full' }, { path: 'home', component: AppComponent }, { path: 'dummy1/:action', component: Dummy1Component, canActivate: [GuardRotaterGuard], }, { path: 'dummyx/:action', component: Dummy2Component, canActivate: [Guard1Guard], }, { path: 'dummyz/:action', canActivate: [Guard1Guard, Guard2Guard], component: Dummy2Component, }, ]; La ruta dummy1/:action es como una ruta de puerta de enlace. Cada solicitud al componente dummy2 debe ir desde aquí. Y luego necesita un protector de decisión/rotación que pueda decidir y rotar la ruta según los parámetros de la ruta. Debería verse como a continuación:
canActivate( next: ActivatedRouteSnapshot, statex: RouterStateSnapshot ): Observable<boolean> | Promise<boolean> | boolean { const { action } = next.params; const state = { comesFrom: 'rotater' }; console.log("rotater",action); if (action === 'read') { // you can decide whatever you want here this.router.navigate(['/dummyx/read'], { state }); }else{ this.router.navigate(['/dummyz', action], { state }); // pass the action to the other route as a parameter } return true; }Y aquí hay un ejemplo de Stackblitz en acción.