如何在服务类

时间:2017-08-29 05:38:49

标签: angular typescript

我的服务代码是:

booking_type()
{
return this.http.get('https://booking.beglammed.com:3001/api/customer     /getAreaCategoryDetails');
}
services_detail()
{
return this.http.get('https://booking.beglammed.com:3001/api/customer/getAreaCategoryDetails');
}

我将它订阅到组件中,组件代码是

ngOnInit() {
this.alldata.services_detail().subscribe( (response : Response  )=>
{
let data = response.json();
this.ServicesArea = data.data.servingAreas;
}
);
this.alldata.booking_type().subscribe( (response : Response  )=>
{
let data = response.json();
this.Bookings_detail = data.data.homeScreenData;
}
);
}

现在我使用 this.booking详细信息 this.SevicesArea 提取出booking_id和area_id。现在我需要在下一个api中传递这些值area_id和booking_id 。那我怎么能在服务中使用这些值,因为我在服务中调用下一个api .`

2 个答案:

答案 0 :(得分:1)

为什么不在你的组件中简化它。

let data = response.json();
this.ServicesArea = data.data.servingAreas;
this.alldata.setServicesArea(this.ServicesArea);
}
);
this.alldata.booking_type().subscribe( (response : Response  )=>
{
let data = response.json();
this.Bookings_detail = data.data.homeScreenData;
this.alldata.setBookings_detail(this.Bookings_detail);
}

然后在您的服务中,您有两个选项使用getter ir call api call。 api看起来像this.http.get(https://booking.beglammed.com:3001/api/books/${this.getBookings_detail()}/${(this.getServicesArea()}确保使用`作为引号而不是正常的。不能像正常原因那样做stackoverflow搞砸然后导致使用相同的引用来显示代码样式... http Angular get example

或者使用方法getBooks(servicesArea: any, bookings_detail: any)。如果在同一个异步调用中想要相同的值,则将第二个调用放在另一个调用中。

答案 1 :(得分:0)

您可以使用Observable forkJoin

像这样

import 'rxjs/add/operator/mergeMap';
import 'rxjs/add/observable/forkJoin';

ngOnInit() {
  Observable.forkJoin([this.alldata.services_detail(), this.alldata.booking_type()]).mergeMap((data:any[]) => {
      this.ServicesArea = data[0].data.servingAreas;
      this.Bookings_detail = data[1].data.homeScreenData;

      //Here you can do whatever you want, bevor you request SomeData4
      return this.alldata.yournewmethod(this.ServicesArea, this.Bookings_detail); // pass the values to a new service method
  }).subscribe((data) => {
      console.log(data); // your data
  });
}