2016-09-06 14 views
6

RC6以上の回答のみを提供してください。適切な方法でAngular2 RC6を使用してqueryParamsを取得する

最近RC1からRC6にアップグレードしようとしましたが、RouteSegmentがなくなっています。多くの掘り出しの後、私はActivatedRouteを見つけましたが、URLから生の価値を引き出すためには複雑すぎるようです。

次の静的クエリ値を読み取る新しい正しい方法はありますか?

const id : Observable<number> = this.route.queryParams.map(p => p.id); 

もしそうなら、私はちょうどURLのクエリ文字列のうち、値6を引っ張ってマップや、観察を必要とする理由を、いくつか説明してくださいできますか?

コードの複雑さが大幅に増加したことを保証するために、私が気に入った新しい機能を説明してください。

明らかなことが見つからない場合は、私に正しい方向を教えてください。私は単純なURLクエリシステムのように固執したいと思います:let id = params.id;あなたのコンポーネントが再利用可能でない場合let foo = this.route.snapshot.queryParams['foo']; :あなたはまた、スナップショット(以下コード) EXを使用することができます

おかげ

答えて

16
import { Component, OnDestroy } from '@angular/core'; 
import { ActivatedRoute } from "@angular/router"; 
import { Subscription } from "rxjs/Rx"; 

@Component({ 
    moduleId: module.id, 
    selector: 'app-home-component', 
    template: ` 
       <h1> 
        Home Component! 
       </h1> 
       <hr> 
       {{param}} 
       `, 
    styles: [] 
}) 

export class HomeComponent implements OnDestroy { 
    private subscription: Subscription; 

    param: string; 

    constructor(private route: ActivatedRoute) { 
     this.subscription = route.queryParams.subscribe(
      (queryParam: any) => this.param = queryParam['paramName'] 
     ); 
    } 

    ngOnDestroy() { 
     this.subscription.unsubscribe(); 
    } 
} 

。そうしないと、このスナップショットは一度だけ作成され、異なるパラメータ(現在のURLのパラメータだけを変更することを意味する)を持つ同じコンポーネントに再度移動すると変更されません。ここで

は例です:

は、あなたが、あなたが「ID」のパラメータ値を取得するために観察可能queryParamsまたはスナップショットへのサブスクリプションを使用することができますmydomain/mycomponent?id=1

にいるとしましょう。結果は同じになります。

mydomain/mycomponent?id=2に移動し、サブスクリプションを使用すると値として「2」が表示されますが、スナップショットを使用すると「1」になります。

+0

本当にありがとうございますが、サブスクリプション、ステートフルな情報、およびURLクエリから静的な値を引き出すためのハンドルがない可能性が本当に必要ですか?スナップショットについて何か知っていますか?私はそれを見つけて、読んでいます。 –

+0

https://angular.io/docs/ts/latest/api/router/index/ActivatedRouteSnapshot-interface.html –

+1

コンポーネントを再利用できない場合は、shapshotを使用できます。そうしないと、このスナップショットは1回だけ作成され、コンポーネントの存続期間中は変更されません。 – rook

関連する問題