Dans mon application Angualar 2 (finale), j'ai souvent besoin de créer une URL complète (absolue) à l'aide d'un nom de route (comme "/ products"), par exemple. fournir un lien permanent vers une page spécifique ou ouvrir une page à partir d'un composant dans un autre onglet/fenêtre.
Existe-t-il une API Angular 2 permettant d'obtenir une URL absolue par un nom de route? Si non, existe-t-il des solutions connues, par exemple en utilisant javascript?
J'ai essayé location ou PathLocationStrategy (par exemple, prepareExternalUrl), mais la méthode renvoie "/ products" au lieu de, par exemple. http: // localhost/products
Vous pouvez utiliser PlatformLocation
pour obtenir base_url, puis concaténer avec le retour de prepareExternalUrl
:
import { PlatformLocation } from '@angular/common';
export class MyComponent {
constructor(
private platformLocation: PlatformLocation
){
this.logAppStart(platformLocation);
}
private logAppStart(platformLocation: any){ // CHANGED THE TYPE TO ANY TO BE ABLE TO ACCESS THE LOCATION PROPERTY
console.log(platformLocation.location); // HERE YOU FIND WHAT YOU NEED
}
}
Trouvé ici
import { Router } from '@angular/router';
[...]
constructor(private router: Router) {
let absoluteUrl = window.location.Origin + this.router.createUrlTree(['/products']);
}
La réponse acceptée peut avoir un problème lorsque votre emplacement actuel est le chemin racine. (CurrentRelativeUrl == '/')..____. Je suggérerais cette amélioration par rapport à la réponse acceptée:
import { Router } from '@angular/router';
[...]
constructor(private _router: Router) { }
redirectNewWindow() {
const internalUrl = '/products';
// Resolve the base url as the full absolute url subtract the relative url.
var currentAbsoluteUrl = window.location.href;
var currentRelativeUrl = this._router.url;
var baseUrl = currentAbsoluteUrl.substring(0, currentAbsoluteUrl.length - currentRelativeUrl.length);
// Concatenate the urls to construct the desired absolute url.
window.open(baseUrl + internalUrl, '_blank');
}