如何在Angular2中redirect到外部URL

在Angular 2中将用户redirect到完全外部URL的方法是什么?例如,如果我需要将用户redirect到OAuth2服务器以进行身份​​validation,那么我将如何执行此操作?

Location.go()Router.navigate()Router.navigateByUrl()可以将用户发送到Angular 2应用程序中的另一个部分(路由),但是我看不到如何将它们redirect到一个外部网站?

你不能使用window.location.href = '...';

这会将页面更改为任何你想要的

正如丹尼斯·斯莫列克所说, 解决scheme非常简单。 将window.location.href设置为你想要切换到的URL,它只是工作。

例如,如果你的组件的类文件(控制器)中有这个方法:

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

然后你可以很简单地用你的模板中的一个button(或其他)进行适当的(click)调用来调用它:

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

前面描述的方法的一种angular度方法是从@angular/platform-browser导入DOCUMENT并使用document.location.href = 'https://stackoverflow.com'; 在一个函数里面。

一些-page.component.ts

 import { DOCUMENT } from '@angular/platform-browser'; ... constructor(@Inject(DOCUMENT) private document: any) { } goToUrl(): void { this.document.location.href = 'https://stackoverflow.com'; } 

一些-page.component.html

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

检查plateformBrowser回购更多的信息。

如果你一直在使用OnDestry生命周期钩子,你可能有兴趣在调用window.location.href = …之前使用类似的东西。

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

这将触发您可能喜欢的组件中的OnDestrycallback。

哦,还有:

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

是你find路由器的地方。

—编辑—可悲的是,我可能在上面的例子中是错的。 至less在我的生产代码中没有正常工作 – 所以,直到我有时间进一步调查,我才能解决这个问题(因为我的应用程序确实需要尽可能的挂钩)

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

基本上路由到任何(虚拟)路由强制挂钩,然后根据请求导航。

我做了Angular 2 Location,因为我不想自己操纵全局窗口对象。

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'); } } 

我用window.location.href =' http:// external-url ';

对我来说,redirect工作在Chrome中,但在Firefox中不起作用。 以下代码解决了我的问题:

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

在你的component.ts中

 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'; } } 

在你的component.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;** 

我需要àtarget =“_ blank” ,你可以使用window.open:

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