I've essentially run into this problem, where I need a reference to the current route to use gradients, but have yet to figure out how to translate the solution into Angular 2.
5 Answers
constructor(location:Location) {
console.log(location.prepareExternalUrl(location.path()));
}
https://angular.io/api/common/Location#prepareexternalurl
As the documentation says:
Normalizes an external URL path. If the given URL doesn't begin with a leading slash ('/'), adds one before normalizing. Adds a hash if HashLocationStrategy is in use, or the APP_BASE_HREF if the PathLocationStrategy is in use.
It means that you have to explicitly specify APP_BASE_HREF to get an absolute path in Angular 5+.
window.location
provides more information
-
Hi, thanks for answering! I'm using the new router library in rc0 which doesn't seem to have a Location provider. Using
window.location.pathname
does seem to work fine for my purposes though, maybe I was just overthinking it a bit. Commented May 30, 2016 at 5:12 -
1Ah, thanks again, I'd forgotten about
@angular/common
, I had only checked router and core. Commented May 30, 2016 at 5:21 -
4@GünterZöchbauer This is only displaying after the base address! any updates? Commented Nov 3, 2016 at 22:17
-
14this does not work with angular 5 it gave me just the path Commented Nov 6, 2017 at 20:58
-
1A couple of updates: 1) The actual documentation link is angular.io/api/common/Location#prepareexternalurl 2) As the documentation says: "Normalizes an external URL path. If the given URL doesn't begin with a leading slash ('/'), adds one before normalizing. Adds a hash if HashLocationStrategy is in use, or the APP_BASE_HREF if the PathLocationStrategy is in use.". It means that you have to explicitly specify APP_BASE_HREF to make it works. Tested in Angular 8.1.– ne4istbCommented Aug 22, 2019 at 10:27
You can use the DOCUMENT
injection from @angular/common
.
import { Component, Inject } from '@angular/core';
import { DOCUMENT } from '@angular/common';
@Component({...})
class SomeComponent {
constructor(@Inject(DOCUMENT) document: any) {
console.log(document.location.href);
}
}
-
This was the only working solution I could find for Angular 5+– RohanCommented Nov 26, 2018 at 1:08
-
-
Location object
The document.location object is your one stop solution.
Use the attributes inside location object from document to get the path in the way you need. Let's see this with an example.
So for https://www.google.com/images
document.location.href
will returnhttps://www.google.com/images
document.location.origin
will returnhttps://www.google.com
document.location.protocol
will returnhttps:
document.location.host
will returngoogle.com
document.location.hostname
will returngoogle
document.location.pathname
will return/images
-
the document object is a free object which you can access without any initialization.– tibiCommented May 20, 2020 at 10:00
if you reload page , you can not get route path by Router or ActivatedRoute .
You should use window.location.pathname
With base href:
import { DOCUMENT, LocationStrategy } from '@angular/common';
@Injectable()
export class SomeService {
constructor(@Inject(DOCUMENT) private readonly document: any,
private readonly locationStrategy: LocationStrategy) {}
// for localhost: http://localhost:4200/someBaseHref
getUrl(): string {
return `${this.document.location.origin}/${this.locationStrategy.getBaseHref()}`
}
}