如何在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"); }