Как перенаправить на внешний URL в Angular2?



каков метод перенаправления пользователя на полностью внешний URL-адрес в Angular 2. Например, если мне нужно перенаправить пользователя на сервер OAuth2 для аутентификации, как бы я это сделал?



Location.go(),Router.navigate() и Router.navigateByUrl() отлично подходит для отправки пользователя в другой раздел (маршрут) в приложении Angular 2, но я не вижу, как их можно использовать для перенаправления на внешний сайт?

703   9  

9 ответов:

вы можете использовать это-> window.location.href = '...';

это изменит страницу на все, что вы хотите..

угловой подход к ранее описанным методам заключается в импорте DOCUMENT С @angular/common (или @angular/platform-browser в угловой

document.location.href = 'https://stackoverflow.com';

внутри функции.

некоторые-страницы.деталь.ТС

import { DOCUMENT } from '@angular/common';
...
constructor(@Inject(DOCUMENT) private document: any) { }

goToUrl(): void {
    this.document.location.href = 'https://stackoverflow.com';
}

некоторые-страницы.деталь.HTML-код

<button type="button" (click)="goToUrl()">Click me!</button>

Проверьте plateformBrowser РЕПО для получения дополнительной информации.

решение, как сказал Деннис Смолек, это очень просто. Набор window.location.href к URL-адресу, на который вы хотите переключиться, и он просто работает.

например, если у вас был этот метод в файле класса вашего компонента (контроллер):

goCNN() {
    window.location.href='http://www.cnn.com/';
}

тогда вы могли бы назвать это довольно просто с соответствующим (click) вызовите кнопку (или что-то еще) в вашем шаблоне:

<button (click)="goCNN()">Go to CNN</button>

мне нужно à target= "_blank", вы можете использовать окно.открыть:

gotoGoogle() : void {
     window.open("https://www.google.com", "_blank");
}

Если вы использовали крюк жизненного цикла OnDestry, вам может быть интересно использовать что-то вроде этого перед вызовом window.местоположение.href=...

    this.router.ngOnDestroy();
    window.location.href = 'http://www.cnn.com/';

это вызовет обратный вызов OnDestry в вашем компоненте, который вам может понравиться.

Охх, а также:

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

где вы найдете маршрутизатор.

---редактировать--- К сожалению, я мог ошибаться в приведенном выше примере. По крайней мере, это не работает так, как описано в моем производственном коде теперь-так, пока у меня нет времени, чтобы исследовать дальше, я решаю это так (так как мое приложение действительно нужно крюк, когда это возможно)

this.router.navigate(["/"]).then(result=>{window.location.href = 'http://www.cnn.com/';});

В основном маршрутизация на любой (фиктивный) маршрут, чтобы заставить крюк, а затем перейдите по запросу.

Я сделал это, используя угловое расположение 2, так как я не хотел сам манипулировать объектом глобального окна.

https://angular.io/docs/ts/latest/api/common/index/Location-class.html#!#prepareExternalUrl-anchor

Это можно сделать так:

import {Component} from '@angular/core';
import {Location} from '@angular/common';
@Component({selector: 'app-component'})
class AppCmp {
  constructor(location: Location) {
    location.go('/foo');
  }
}

я использовал окно.местоположение.href ='http://external-url';

для меня редиректы работали в Chrome, но не работали в Firefox. Следующий код решил мою проблему:

window.location.assign('http://external-url');

после отрывания моей головы, решение состоит только в том, чтобы добавить http:// к href.

<a href="http://www.URL.com">Go somewhere</a>

в своем компонент.ТС

import { Component } from '@angular/core';

@Component({
  ...
})
export class AppComponent {
  ...
  goToSpecificUrl(url): void {
    window.location.href=url;
  }

  gotoGoogle() : void {
    window.location.href='https://www.google.com';
  }
}

в своем компонент.HTML-код

<button type="button" (click)="goToSpecificUrl('http://stackoverflow.com/')">Open URL</button>
<button type="button" (click)="gotoGoogle()">Open Google</button>

<li *ngFor="item of itemList" (click)="goToSpecificUrl(item.link)"> // (click) don't enable pointer when we hover so we should enable it by using css like: **cursor: pointer;**

Comments

    Ничего не найдено.