Frage zu Angular routing?
{
path: ':teamsId', // Pfad für die zweite Route mit :teamsId
loadChildren: () =>
import('./players/players.module').then((m) => m.PlayersPageModule),
},
{
path: ':teamsId',
canActivate: [RedirectTeamGuard],
loadChildren: () =>
import('./create-enemy-team/create-enemy-team.module').then(
(m) => m.CreateEnemyTeamPageModule
),
},
Ich möchte das bestimmte teams auf die create seite geleitet werden und die anderen zur players seite, dabei brauche ich die :teamsId also habe ich zweimal den gleich Pfad will aber auf unterschiedliche Seiten
1 Antwort
Moin,
du kannst einen Guard benutzen, der checkt, welche teamsId du hast. Je nach teamsId leitet der dich dann entweder zur Players-Seite oder zur CreateEnemyTeam-Seite weiter. So musst du nicht den gleichen Pfad für zwei verschiedene Seiten verwenden.
Ich habe gerade keine Möglichkeit diese zu testen, bin auch nit tief in der Materie, allerdings kann es dir eventuell weiterhelfen.
Ich gebe dir mal ein Beispiel:
@Injectable({
providedIn: 'root'
})
export class RedirectTeamGuard implements CanActivate {
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
const teamsId = route.params['teamsId'];
if (someCondition(teamsId)) {
return this.router.createUrlTree(['/players', teamsId]);
} else {
return this.router.createUrlTree(['/create-enemy-team', teamsId]);
}
}
}
Füge dann diesen Guard in deiner Routing-Konfiguration hinzu:
{
path: ':teamsId',
canActivate: [RedirectTeamGuard],
loadChildren: () => import('./some-default.module').then(m => m.SomeDefaultPageModule),
}
Hier würde someCondition deine eigene Logik sein, um zu entscheiden, welche Seite geladen werden soll.