在Angular 2中获取ActivatedRoute param和queryParam

时间:2017-01-01 20:55:24

标签: angular rxjs5

以角度2获取整个网址内容的最佳方法是什么。基本上我需要params和queryParams。现在我被困在这里:

ngOnInit() {
this.activatedRoute.queryParams.subscribe(queryParam =>{
  console.log(queryParam);
});
this.activatedRoute.params.subscribe(params =>{
  const category = params['category'];
  this.seoService.setTitle(category);

  // This is wrong because i also need queryParams here
  this.categoryService.updateCategory(category);

     });
   }
}

这是我能想到的最好的。 我的目标是url这样/ category-name?page = 1& sortBy = something& size = 30& sortOrder = ASC& L = UTF-8

我试图从activateRoute中获取下一个值,并使用所有信息组装一个对象,然后调用后端服务。

2 个答案:

答案 0 :(得分:2)

你可以使用combineLatest:

获得两者
Rx.Observable.combineLatest(
    this.activatedRoute.queryParams,
    this.activatedRoute.params)
.subscribe(([queryParam, params]) => {
    ...
});

答案 1 :(得分:0)

我确实接受了之前的回答,但事实证明它与queryParams有问题。有时queryParams有时不存在,因此我的值不一致。使用withLatestFrom而不是combineLatest就可以了。

this.activatedRoute.params.withLatestFrom(this.activatedRoute.queryParams)
                          .subscribe(([params,queryParam ]) =>{
            const category = params['category'];
            let urlSearchParams : URLSearchParams = this.assembleSearchParams(queryParam);
            ...
}