2017-01-03 2 views
3

В моем приложении Angualar 2 (final) мне часто нужно создать полный (абсолютный) Url по имени маршрута (например, '/ products'), например. для предоставления постоянной ссылки на конкретную страницу или для открытия страницы с помощью компонента в другой вкладке/окне.Как получить абсолютный URL по названию маршрута в Angular 2?

Есть ли какой-либо Angular 2 API, который позволяет получить абсолютный URL по названию маршрута? Если нет, то это известная проблема для, например. используя javascript?

Я пробовал местоположение или PathLocationStrategy (например, prepareExternalUrl), но метод возвращает '/ products' вместо, например,. http://localhost/products

+0

Вы пытались использовать 'window.location.hos t' конкатенация с возвратом 'prepareExternalUrl'? Зачем тебе это? 'routerLink' недостаточно? – vinagreti

+0

Окно.location.host не содержит полного базового Url, например. для http: //localhost.8000/virt_sites/virt_dir/test.html мы ожидаем «http: //localhost.8000/virt_sites/virt_dir» вместо «http: //localhost.8000». Мне нужно открыть страницу проекта в новом окне из компонента (не из представления!), Используя, например, window.open (absoluteUrl, '_blank). Возможно ли это с помощью routerLink? Я думаю нет. –

ответ

1

Единственное решение, которое я нашел сейчас

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 index = currentAbsoluteUrl.indexOf(currentRelativeUrl); 
    var baseUrl = currentAbsoluteUrl.substring(0, index); 

    // Concatenate the urls to construct the desired absolute url. 
    window.open(baseUrl + internalUrl, '_blank'); 
} 
1

Вы можете использовать PlatformLocation, чтобы получить base_url, то вы можете сцепить с возвращением 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 
     } 
    } 

Найдено here

+0

ПлатформаLocation.location возвращает неверную информацию, например. для "http: // localhost: 20623/welcome" возвращает ту же строку вместо базового url "http: // localhost: 20623". В моем ответе я мог бы перевернуть правильный базовый url, но не напрямую с угловым 2 компонентом. –

+0

Кажется, что это 'platformLocation.origin', а не' platformLocation.location' –

0
import { Router } from '@angular/router'; 

[...] 

constructor(private router: Router) { 
    let absoluteUrl = window.location.origin + this.router.createUrlTree(['/products']); 
} 
+1

, вы должны добавить более подробную информацию –

 Смежные вопросы

  • Нет связанных вопросов^_^