2016-11-12 15 views
4

私のフォームは経路パラメータとデータにアクセスする必要があります。彼らはobservablesだから私は彼らの値にアクセスするために購読する必要があります。私の質問は、どのように私は一緒に1つのサブスクリプションでそれらにアクセスするのですか?角度2の経路パラメータとデータを購読する

this._route.params.subscribe(
    params => { 
    getData(params['id'], data['id2'] <=== i need data value too. how do i get this???) 
    }); 

なぜ角が2つの別々の観測値に入れられるのですか?

答えて

7

どのように1つのサブスクリプションでそれらの両方にアクセスできますか?

ActivatedRouteActivatedRouteSnapshotを使用できます。 ActivatedRouteSnapshotインターフェイスはparamsqueryParamsプロパティを持ち、同時に両方の値を取得できます。注:私たちだけ

constructor(private _route: ActivatedRoute) { 
    console.log(this._route.snapshot.params); 
    console.log(this._route.snapshot.data); 
} 

この技術を用いて、パラメータの初期値を取得する例Plunker

もう一つの方法は、paramsdataobservableているので、私たちは、その後でそれらにアクセスし、それらをマージするzip演算子を使用することができます単一の購読しかし、paramsまたはdataのいずれかが値を持たない場合、サブスクライブはトリガーされないことに注意してください。

this._route.params 
    .zip(this._route.data) 
    .subscribe((value) => { 
    this.id = value[0]["id"]; // get param 
    this.data = value[1]; // get data value 
    }); 

Plunker

なぜ角度は、2つの別々の観測に入れていますか?

私はマニュアルを読んできましたが、あなたは正しいですが、別個の観察可能な部分にありますが、理由はわかりません。

+1

によると、彼らはそうです。 this._route.params.subscribe and this._route.data.subscribe – Reynaldi

+0

@Reynaldiええ、あなたは正しいです。私は間違っていた。申し訳ありませんが、私はより多くのドキュメントを読むべきです。 – Michael

+0

@Reynaldi私は自分の答えを編集しました。お知らせ下さい。 – Michael

0

マイケルの応答と同様に、のActivatedRouteSnapshotを使用して、ルートdataを取得できます。

これをparamsサブスクリプションに入れることができます。ルートにはparamsが含まれていなくてもトリガーされます。

this.route.params.subscribe((params) => { 
    console.log(params); 
    console.log(this.route.snapshot.data); 
}); 
関連する問題