2016-06-13 6 views

Antwort

4

Sie können

auch

mit bekommen See How do I get the absolute path of the current page in Angular 2?

+0

Danke..Es funktioniert !! Aber wenn ich versuchte, location.path() zu verwenden, zeigt es nichts ... Jedenfalls funktioniert es, wenn ich direkt das Fensterobjekt verwende. Danke nochmal :) – Kevin

+0

Hast du 'constructor (location: Location) {console.log (location. ja} ' –

+0

' Konstruktor; Pfad (?). (Standort: Ort) { alert (location.prepareExternalUrl (location.path()); console.log (location.path()); } ' – Kevin

28

Das ist spät, aber ich dachte, es war eine Aktualisierung wert. Ab der endgültigen Version von Angular2 können Sie DOCUMENT von @ angular/common importieren und verwenden, um an den Speicherort zu gelangen.

import { Component, Inject } from '@angular/core'; 
import { DOCUMENT } from '@angular/common'; 

... 

export class YourComponent { 

    constructor(@Inject(DOCUMENT) private document: Document) { 
     console.log(this.document.location.href); 
    } 
} 
+0

'export 'DOKUMENT' wurde nicht gefunden in '@ angular/common'' ab '4.1.3'. – Deilan

+0

@Deilan hatte ich eine schnelle Überprüfung der Quelle, es ist immer noch da https://github.com/angular/angular/blob/master/packages/common/src/dom_tokens.ts – JayChase

5

Import der ActivatedRoute, (und der Rest des Routers Sachen auch, wenn Sie wollen)

import { ActivatedRoute, Params, Router, UrlSegment } from '@angular/router'; 

sicherstellen, dass es in den Konstruktor injiziert ist,

constructor(private route: ActivatedRoute) { ... } 

und auf ngOnInit Sie können this.route verwenden, um die URL zu überprüfen. Zum Beispiel sind alle die Segmente in einem Array, das können Sie aneinanderzureihen, wie @ibgib vorgeschlagen, wie folgt aus:

let path = this.route.snapshot.url.join('/'); 

, um Ihnen so etwas wie „Mars/Monde/phobos“.

+1

Ich persönlich mag dieses ve rsion. "This.route.url" ist jedoch ein "Observable ". Vielleicht anstatt "forEach" zu verwenden, um das Observable aufzuzählen, das mehrere Iterationen erzeugen kann, verwenden Sie stattdessen 'this.route.snapshot.url.join ('/')' statt dessen? – ibgib

+1

Danke @ibgib - benutzte Ihren Code in der Antwort. Viel idiomatischer. –

+0

Hmm Ich bekomme einen leeren Pfad, wenn ich diese Methode benutze, obwohl meine URL nicht die Wurzel ist. – thienedits

6

Für zukünftige Reisende sind viele der anderen Antworten großartig. Eine weitere Option, wenn Sie alles, was vor dem Pfadnamen möchten (z https://example.com), dann können Sie verwenden:

window.location.origin

Hier ist eine W3 Artikel über die verschiedenen window.location Eigenschaften können Sie: http://www.w3schools.com/js/js_window_location.asp

Prost!

+0

das funktioniert nicht. Fehler mit: ReferenceError: Fenster ist nicht definiert – Neurothustra

+0

@Neurothustra Sie können versuchen, eine neue Frage zu öffnen und Ihren Code zu veröffentlichen. Ich vermute, es ist eine Art von Race Condition. Fenster ist in den Browser selbst eingebrannt, also vermute ich, dass es ein lokales Problem ist. – kbpontius

9

Es ist nicht notwendig, komplizierte Pakete zu importieren oder etwas zu injizieren. Verwenden Sie einfach die Methoden, die Sie unter window.location finden können!

wie:

  • window.location.href gibt Ihnen die vollständige URL
  • window.location.hostname gibt Ihnen die Hostnamen
  • window.location.origin mit diesem Befehl können Sie die Hostnamen mit Protokoll erhalten (zB https: //)
  • und mehr, wie Sie hier sehen können: click me
+1

danke für die Freigabe. –

2

Dieser Link half mir:

public static getCurrentAbsoluteSiteUrl(): string { 
    if (window 
     && "location" in window 
     && "protocol" in window.location 
     && "pathname" in window.location 
     && "host" in window.location) { 
     return window.location.protocol + "//" + window.location.host + window.location.pathname; 
    } 
    return null; 
} 
Verwandte Themen