Angular 2で完全に外部のURLにユーザーをリダイレクトする方法は何ですか。たとえば、認証のためにユーザーをOAuth2サーバーにリダイレクトする必要がある場合、どうすればよいですか?
Location.go()
、Router.navigate()
、およびRouter.navigateByUrl()
角度2アプリ内の他のセクション(ルート)にユーザーを送信するための罰金ですが、私は彼らが外部のサイトにリダイレクトするために使用する方法を見ることができませんか?
Angular 2で完全に外部のURLにユーザーをリダイレクトする方法は何ですか。たとえば、認証のためにユーザーをOAuth2サーバーにリダイレクトする必要がある場合、どうすればよいですか?
Location.go()
、Router.navigate()
、およびRouter.navigateByUrl()
角度2アプリ内の他のセクション(ルート)にユーザーを送信するための罰金ですが、私は彼らが外部のサイトにリダイレクトするために使用する方法を見ることができませんか?
回答:
あなたはこれを使うことができます-> window.location.href = '...';
これにより、ページが必要なものに変更されます。
document.location.href
またはLocation.href
同じオブジェクトを参照している場合でも、呼び出すことができます。場所の参照
前述の方法に対するAngularのアプローチは、(Angular <4から)インポートDOCUMENT
して使用することです@angular/common
@angular/platform-browser
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>
詳細については、plateformBrowserリポジトリを確認してください。
@angular/common
(つまりimport { DOCUMENT } from '@angular/common';
)が、それ以外の場合はこれでうまくいきます!github.com/angular/angular/blob/master/packages/…を
@Inject(DOCUMENT) private document: any
DOCUMENT
すると、単体テストでドキュメントオブジェクトをモックに簡単に置き換えることができます。また、他のプラットフォーム(サーバー/モバイル)で代替の実装を使用することもできます。
constructor(@Inject(DOCUMENT) private document: Document) { }
OnDestryライフサイクルフックを使用していた場合は、window.location.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/';});
基本的に、任意の(ダミー)ルートにルーティングしてフックを強制し、要求に応じてナビゲートします。
Angularの新しいバージョンでは、ウィンドウを any
(window as any).open(someUrl, "_blank");
私はwindow.location.href = ' http:// external-url 'を使用しました。
私にとってリダイレクトはChromeでは機能しましたが、Firefoxでは機能しませんでした。次のコードは私の問題を解決しました:
window.location.assign('http://external-url');
自分でグローバルウィンドウオブジェクトを操作したくなかったので、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');
}
}
router.navigate(['/']);
それは私のために何をしたのですか
あなたの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;**