Ich verwende einen Guard, um sicherzustellen, dass Benutzer sich authentifizieren, bevor sie die von ihnen angeforderte Seite erreichen.So erhalten Sie das URL-Segment in einem CanActivate-Guard
Ein besonderer Anwendungsfall sieht vor, dass ein Benutzer eine URL mit einigen Abfrage params eintritt, wie https://myserver.com/the-page-i-want?par1=val1&par2=val2
Innerhalb der Wache ich sowohl die params und das URL-Segment (dh abrufen müssen die -page-ich-will in diesem Fall). Um zu tun haben, damit ich die folgende Stück Code implementiert
export class AuthGuard implements CanActivate {
constructor(private router: Router) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
const url = state.url;
const queryParams = route.queryParams;
// some other logic
}
}
Was ich sehe, wenn ich den Code ausführen, dass die queryParams
Variable tatsächlich mit dem Objekt mit den übergebenen Parameter im Query-String gefüllt ist. Die Variable url
enthält andererseits die gesamte URL-Zeichenkette einschließlich der Parameter (d. H. In diesem Fall enthält sie the-page-i-will? Par1 = val1 & par2 = val2).
Wenn ich den Wert des route
Parameter überprüfen kann ich sehen, dass die Informationen, die ich suche (dh nur die-Seite-i-want) ist irgendwo tief in der _urlSegment
Eigenschaft gespeichert, aber nicht angeboten über eine API.
Ich bin mit Angular v2.4.9 mit kantigem Router 3.4.9
Jeder Vorschlag, wie das URL-Segment bekommen würde sehr geschätzt werden.
Leider durch Route Snapshot zurück die URL ist ein leeres Array. Dies ist der Grund, warum ich die Frage gestellt habe – Picci
Meinst du, dass 'console.log (route.url)' ein leeres Array anzeigen? Hmm, das ist seltsam. Kann ich Ihre Routenkonfiguration haben? –