現在のドキュメントでは、実際のルートセグメントではなく、ルートパラメータの取得についてのみ説明しています。
たとえば、現在のルートの親を見つけたい場合、どうすれば可能ですか?
window.location
は、将来的にサーバー側のレンダリングを実装したいwindow
場合、Node.jsサーバーには存在しないため、いくつかの問題に直面することになりますが、ルートにアクセスするにはAngular標準メソッドを使用する必要がありますサーバーとブラウザの両方で問題ありません。
現在のドキュメントでは、実際のルートセグメントではなく、ルートパラメータの取得についてのみ説明しています。
たとえば、現在のルートの親を見つけたい場合、どうすれば可能ですか?
window.location
は、将来的にサーバー側のレンダリングを実装したいwindow
場合、Node.jsサーバーには存在しないため、いくつかの問題に直面することになりますが、ルートにアクセスするにはAngular標準メソッドを使用する必要がありますサーバーとブラウザの両方で問題ありません。
回答:
新しいV3ルーターにはurlプロパティがあります。
this.router.url === '/login'
this.router.events.filter((event: any) => event instanceof NavigationEnd).subscribe(event => { console.log('this is what your looking for ', event.url); });
。必ずインポートしてくださいimport { Router, NavigationEnd } from '@angular/router';
Angular RC4:
Router
からインポートできます@angular/router
次に、それを注入します。
constructor(private router: Router ) {
}
次に、URLパラメータを呼び出します。
console.log(this.router.url); // /routename
Location
コンポーネントにインジェクトして読んでくださいAngularが解決できるようlocation.path();
に、ROUTER_DIRECTIVES
どこかに追加する必要がありますLocation
。import: [RouterModule]
モジュールに追加する必要があります。
更新
V3(RC.3)ルーターでActivatedRoute
は、そのsnapshot
プロパティを使用して、詳細を挿入してアクセスできます。
constructor(private route:ActivatedRoute) {
console.log(route);
}
または
constructor(private router:Router) {
router.events.subscribe(...);
}
Angular 2ルーターイベントリスナーもご覧ください
navigate
ナビゲートしたい子ルートの(追加された)名前とともにメソッドにそれらを配列で渡すことができますか
MyTrackingService
、stackoverflow.com / a / 34548656/217408で説明されているようにこれらの値にアクセスできます。
canActivate()
バックユーザーが認証した後、元のルートに?
新しいルーター> = RC.3
これを行う最良かつ簡単な方法は次のとおりです!
import { Router } from '@angular/router';
constructor(router: Router) {
router.events.subscribe((url:any) => console.log(url));
console.log(router.url); // to print only path eg:"/login"
}
これを使って
import { Router, NavigationEnd } from '@angular/router';
constructor(private router: Router) {
router.events.filter(event => event instanceof NavigationEnd)
.subscribe(event => {
console.log(event);
});
}
そしてmain.ts
輸入で
import 'rxjs/add/operator/filter';
編集
モダンな方法
import {filter} from 'rxjs/operators';
router.events.pipe(
filter(event => event instanceof NavigationEnd)
)
.subscribe(event => {
console.log(event);
});
/
ます。
まだこれを探している人のために。Angular 2.xでは、いくつかの方法があります。
constructor(private router: Router, private activatedRoute: ActivatedRoute){
// string path from root to current route. i.e /Root/CurrentRoute
router.url
// just the fragment of the current route. i.e. CurrentRoute
activatedRoute.url.value[0].path
// same as above with urlSegment[]
activatedRoute.url.subscribe((url: urlSegment[])=> console.log(url[0].path))
// same as above
activatedRoute.snapshot.url[0].path
// the url fragment from the parent route i.e. Root
// since the parent is an ActivatedRoute object, you can get the same using
activatedRoute.parent.url.value[0].path
}
参照:
あなたは試すことができます
import { Router, ActivatedRoute} from '@angular/router';
constructor(private router: Router, private activatedRoute:ActivatedRoute) {
console.log(activatedRoute.snapshot.url) // array of states
console.log(activatedRoute.snapshot.url[0].path) }
別の方法
router.location.path(); this works only in browser console.
window.location.pathname
パス名を指定します。
現在のルート全体を確実に取得するには、これを使用できます
this.router.events.subscribe(
(event: any) => {
if (event instanceof NavigationEnd) {
console.log('this.router.url', this.router.url);
}
}
);
ネイティブwindow
オブジェクトも正常に動作します
console.log('URL:' + window.location.href);
console.log('Path:' + window.location.pathname);
console.log('Host:' + window.location.host);
console.log('Hostname:' + window.location.hostname);
console.log('Origin:' + window.location.origin);
console.log('Port:' + window.location.port);
console.log('Search String:' + window.location.search);
注:サーバー側のレンダリングではこれを使用しないでください
ルーターがある場合はショートバージョンインポートし使用するだけで、
this.router.url === "/ search"
それ以外の場合は、次の操作を行います
1)ルーターをインポートする
import { Router } from '@angular/router';
2)コンストラクターでそのエントリを宣言する
constructor(private router: Router) { }
3)関数でその値を使用する
yourFunction(){
if(this.router.url === "/search"){
//some logic
}
}
@victorの回答は私を助けました、これは彼と同じ回答ですが、誰かを助けるかもしれないので、少し詳細です
Angular2 Rc1では、RouteSegmentを注入してnaviagteメソッドで渡すことができます。
constructor(private router:Router,private segment:RouteSegment) {}
ngOnInit() {
this.router.navigate(["explore"],this.segment)
}
angular 2.2.1(angular2-webpack-starterベースのプロジェクト)でこれは動作します:
export class AppComponent {
subscription: Subscription;
activeUrl: string;
constructor(public appState: AppState,
private router: Router) {
console.log('[app] constructor AppComponent');
}
ngOnInit() {
console.log('[app] ngOnInit');
let _this = this;
this.subscription = this.router.events.subscribe(function (s) {
if (s instanceof NavigationEnd) {
_this.activeUrl = s.urlAfterRedirects;
}
});
}
ngOnDestroy() {
console.log('[app] ngOnDestroy: ');
this.subscription.unsubscribe();
}
}
AppComponentのテンプレートでは、{{activeUrl}}などを使用できます。
このソリューションは、RouterLinkActiveのコードに着想を得ています。
これがAngular 2.3.1で私のために働いているものです。
location: any;
constructor(private _router: Router) {
_router.events.subscribe((data:any) => { this.location = data.url; });
console.warn(this.location); // This should print only path e.g. "/home"
}
data
オブジェクトであり、我々は必要とurl
、そのオブジェクトに含まれるプロパティを。そのため、その値を変数に取り込み、その変数をHTMLページでも使用できます。たとえば、ユーザーがホームページにいるときにのみdivを表示したいとします。この場合、ルーターのURL値はになります/home
。だから私は次の方法でdivを書くことができます:
<div *ngIf="location == '/home'">
This is content for the home page.
</div>
ActivatedRoute
現在のルーターを取得するために使用できます
元の回答(RCバージョンの場合)
AngularJS Google Groupで解決策を見つけました。とても簡単です。
ngOnInit() {
this.router.subscribe((url) => console.log(url));
}
これが元の答えです
https://groups.google.com/d/msg/angular/wn1h0JPrF48/zl1sHJxbCQAJ
url
ました。URLと文字列ではなく、になりましたComponentInstruction
。
方法1:Angularの使用:this.router.url
import { Component } from '@angular/core';
// Step 1: import the router
import { Router } from '@angular/router';
@Component({
template: 'The href is: {{href}}'
/*
Other component settings
*/
})
export class Component {
public href: string = "";
//Step 2: Declare the same in the constructure.
constructor(private router: Router) {}
ngOnInit() {
this.href = this.router.url;
// Do comparision here.....
///////////////////////////
console.log(this.router.url);
}
}
WAY 2 Window.location(Javascriptで行うように、ルーターを使用したくない場合)
this.href= window.location.href;
あなたの目的のために使用できますthis.activatedRoute.pathFromRoot
。
import {ActivatedRoute} from "@angular/router";
constructor(public activatedRoute: ActivatedRoute){
}
pathFromRootを使用して、親URLのリストを取得し、URLの必要な部分が条件に一致するかどうかを確認できます。
詳細については、この記事http://blog.2muchcoffee.com/getting-current-state-in-angular2-router/を確認する か、npmからng2-router-helperをインストールしてください
npm install ng2-router-helper
今のところ、私は次のように私のパスを取得しています-
this.router.url.subscribe(value => {
// you may print value to see the actual object
// console.log(JSON.stringify(value));
this.isPreview = value[0].path === 'preview';
})
ここでrouter
、のインスタンスはActivatedRoute
これは簡単です。angular2では、次のようにルーターライブラリをインポートするだけです。
import { Router } from '@angular/router';
次に、コンポーネントまたはサービスのコンストラクターで、次のようにインスタンス化する必要があります。
constructor(private _router: Router) {}
次に、コードの任意の部分で、関数、メソッド、構成など、次のいずれかを行います。
this._router.events
.subscribe(
(url:any) => {
let _ruta = "";
url.url.split("/").forEach(element => {
if(element!=="" && _ruta==="")
_ruta="/"+element;
});
console.log("route: "+_ruta); //<<<---- Root path
console.log("to URL:"+url.url); //<<<---- Destination URL
console.log("from URL:"+this._router.url);//<<<---- Current URL
});
これはあなたの答えである可能性があります。アクティブ化されたルートのparamsメソッドを使用して、読み取りたいURL /ルートからパラメータを取得します。以下はデモスニペットです
import {ActivatedRoute} from '@angular/router';
@Component({
})
export class Test{
constructor(private route: ActivatedRoute){
this.route.params.subscribe(params => {
this.yourVariable = params['required_param_name'];
});
}
}
this.router.events.subscribe((val) => {
const currentPage = this.router.url; // Current page route
const currentLocation = (this.platformLocation as any).location.href; // Current page url
});
現在のURLにアクセスする必要がある場合は、通常、NavigationEndまたはNavigationStartが何かを行うのを待つ必要があります。ルーターイベントをサブスクライブするだけの場合、サブスクリプションはルートライフサイクルで多くのイベントを出力します。代わりに、RxJSオペレーターを使用して、必要なイベントのみをフィルターに掛けます。これの有益な副作用は、より厳密なタイプになりました!
constructor(private router: Router) {
router.events.pipe(
filter(ev => (ev instanceof NavigationEnd))
).subscribe((ev: NavigationEnd) => {
console.log(ev.url);
});
}
ユーザーがアプリ内を移動するとき、またはURLに基づいて子コンポーネントを表示するためにURLにアクセスするとき(または特定のURLで更新するとき)にURLパスが必要になるという問題に直面していました。
さらに、テンプレートで使用できるObservableが必要なので、router.urlはオプションではありませんでした。コンポーネントのテンプレートが初期化される前にルーティングが発生するため、router.eventsサブスクリプションもありません。
this.currentRouteURL$ = this.router.events.pipe(
startWith(this.router),
filter(
(event) => event instanceof NavigationEnd || event instanceof Router
),
map((event: NavigationEnd | Router) => event.url)
);
お役に立てば幸いです。
window.location.pathname