2017-04-14 6 views
1

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.

Antwort

0

Sie sollten stattdessen route.url[0].path verwenden. Nach ActivatedRouteSnapShot Dokumentation, route.url sollte eine Reihe von UrlSegment zurückkehren, nach, dass Sie die path Ihre UrlSegment in meinem Fall zugreifen können

+0

Leider durch Route Snapshot zurück die URL ist ein leeres Array. Dies ist der Grund, warum ich die Frage gestellt habe – Picci

+0

Meinst du, dass 'console.log (route.url)' ein leeres Array anzeigen? Hmm, das ist seltsam. Kann ich Ihre Routenkonfiguration haben? –

Verwandte Themen