Angular5 ParamMap和HttpClient

时间:2017-12-07 23:28:52

标签: angular rxjs observable angular5

如何通过Angular5中的服务让ParamMap与HttpClient一起使用?

组件

// importing the service, ActivatedRoute, ParamMap, switchMap, etc

public value;
constructor(private myService: MyService, private activatedRouter: ActivatedRoute) { }

ngOnInit() {
    this.value = this.activatedRouter.paramMap
    .switchMap((params: ParamMap) => this.myService.getOne(params.get('id')));
  }

服务

import { HttpClient } from '@angular/common/http';
// ...
constructor(private httpClient: HttpClient) { }
getOne(id) {
    return this.httpClient.get(`http://my.api/${id}`);
  }

目前,如果我在我的组件中console.log(this.value),我会得到AnonymousSubject

问题是,如何使用ParamMap并从HttpClient获取值?我知道我可以使用路由器快照 - 我已经完成了它并且它可以正常工作,但我也想让这个例子正常工作。

2 个答案:

答案 0 :(得分:1)

您需要subscribe()来获取数据。它在订阅中获取数据

ngOnInit() {
   this.activatedRouter.paramMap
   .switchMap((params: ParamMap) =>   
      this.myService.getOne(params.get('id'))).subscribe((data:any)=>{
           this.value=data
   });
 }

答案 1 :(得分:0)

根据CozyAzure的评论,最终的解决方案是

this.activatedRouter.paramMap
    .switchMap((params: ParamMap) =>
      this.myService.getOne(params.get('id')))
      .subscribe(data => value = data);
  }