2017-08-02 9 views
1

これらをobservablesに結合して1つにするにはどうすればよいですか?彼らは同じ機能を持っています。Angular - paramsとqueryParams observablesを組み合わせる

this.sub = this.route.params.subscribe((params: any) => { 
    // functionality 
}); 

this.sub = this.route.queryParams.subscribe((params: any) => { 
    // same functionality 
}); 

答えて

1

あなたはそれを行うためにcombineLatestを使用することができます。

import { ActivatedRoute, Params } from '@angular/router'; 
import 'rxjs/add/observable/combineLatest'; 

... 

constructor(private route: ActivatedRoute) { } 

ngOnInit() { 
    this.sub = Observable.combineLatest(this.route.params, 
    this.route.queryParams, (params: Params, qparams: Params) => ({ params, qparams })) 
       .subscribe((allParams) => { 
        console.log(allParams.params); 
        console.log(allParams.qparams); 
    }); 
} 

のparamsとqparamsはのparamの名前と値として値として、プロパティ名を持つオブジェクトになります。だから、ルートのために:のparams

http://localhost:4200/test1/paramvalue?qparam=qpvalue 

allParamsと

RouterModule.forRoot([{ 
    path: 'test1/:id', 
    component: Test1Component 
}]) 

{ 
    params: { 
    id: "paramvalue" 
    }, 
    qparams: { 
    qparam: "qpvalue" 
    } 
} 
+0

allParamsが2つのオブジェクト "のparams" と "qparams" 内ahveになります。 "オブジェクトオブジェクト"とqparams: "[オブジェクトオブジェクト]"とその他すべての実際のパラメータ – Michalis

+0

Screenshot:https://i.imgur.com/brxzEjj.png – Michalis

+0

@Michalisを追加しました。答えにもう少し詳しく、paramsの両方のプロパティがオブジェクトになります。 – JayChase

関連する問題