2016-07-06 2 views
1

私は角度2のrc4でルータ3.0.0-beta.1を使用しています。 私は現在のルート上のデータの複数の部分を取得する方法を知っています。 私はparams、data、およびURLが必要です。角2 rc4と3.0ルータ:すべての経路情報を効率的に取得する方法

これら3つの部分はすべて、観察可能な方法で経路に露出されています。 私はこの厄介なコードを思い付いた、これは、より効率的に行うことができる場合、私は疑問に思って:

@Component({ 
    ... 
}) 
@Injectable() 
export class MyComponent implements OnInit { 

    constructor(private route:ActivatedRoute) { 
    } 

    ngOnInit() { 
     this.urlSub = this.route.url.subscribe(url=> { 
      this.dataSub = this.route.data.subscribe(data=> { 
       this.paramsSub = this.route.params.subscribe(params=> { 

        ... logic using all 3 variables: params, data, url 

       }); 
      }); 
     }); 
    } 
} 

おかげ

+0

なぜこの厄介なのですか? – AngJobs

+0

多くのボイラーメッキが必要です。私はurlSub、dataSub、paramsSubサブスクリプションの宣言など、あらゆることを追加しませんでした。そして、ngOnDestroyメソッドでの登録解除。 – mvermand

+0

はい、しかし、共有コンポーネント/サービスでのみこれを行うことができます – AngJobs

答えて

2

をあなたが探しているようだzipArrayです。これは、各観測値から値が得られるまで待つ。

(docsからの抽出) zipArrayは、Observableの可変数をパラメータとして受け取り、それぞれがObservableの各ソースからn番目の項目を含む配列を放出するObservableを返します。

サンプルコード

var range = Rx.Observable.range(0, 5); 

var source = Rx.Observable.zipArray(
    range, 
    range.skip(1), 
    range.skip(2) 
); 

var subscription = source.subscribe(
    function (x) { 
    console.log('Next: ' + x); 
    }, 
    function (err) { 
     console.log('Error: ' + err); 
    }, 
    function() { 
     console.log('Completed'); 
    }); 

Next: [0,1,2] 
Next: [1,2,3] 
Next: [2,3,4] 
Completed 
+0

例のおかげでありがとうございました。この例ではルートデータを適用した方がいいでしょう;-)私はすべての関連データを "完了しました "セクションを使用する必要がありますか?あなたが参照しているドキュメントに実際のリンクを追加できますか? – mvermand

+0

私はその小さな運動をして、鋭いリーダー= –

関連する問題