在Angular 2中,把用户重定向到一个完全外部URL的方法是什么?例如,如果我需要将用户重定向到OAuth2服务器以进行身份验证,我该如何做呢?

Location.go()、Router.navigate()和Router.navigateByUrl()用于将用户发送到Angular 2应用程序中的另一个部分(路由),但我不知道如何使用它们重定向到外部站点?


当前回答

以上的解决方案对我都不起作用,我只是补充说

window.location.href = "www.google.com"
event.preventDefault();

这对我很管用。

或者试着使用

window.location.replace("www.google.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://www.google.com/';

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

对我来说,重定向在Chrome中有效,但在Firefox中不起作用。 下面的代码解决了我的问题:

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

在较新的Angular版本中,window为any

(window as any).open(someUrl, "_blank");

使用前面描述的方法的Angular方法是从@angular/common(或Angular中的@angular/platform-browser)导入DOCUMENT < 4)和使用

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

在函数内部。

some-page.component.ts

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

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

some-page.component.html

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

查看platformBrowser repo以获得更多信息。