Angular 角度8:获取值而不订阅可观测值

Angular 角度8:获取值而不订阅可观测值,angular,components,observable,Angular,Components,Observable,以下是我需要在应用程序的各个部分订阅的两种方法: getProducts(): Observable<Product[]> { return this.http.get<Product[]>(this.url); } getProductsByIds(ids: number[]): Observable<Products[]> { return this.getProducts() .map(products =>

以下是我需要在应用程序的各个部分订阅的两种方法:

  getProducts(): Observable<Product[]> {
    return this.http.get<Product[]>(this.url);
}

  getProductsByIds(ids: number[]): Observable<Products[]> {
    return this.getProducts()
      .map(products => products.filter(products => ids.includes(product.id)));
}
getProducts():可观察{
返回this.http.get(this.url);
}
GetProductsById(ID:number[]):可观察{
返回此文件。getProducts()
.map(products=>products.filter(products=>ids.includes(product.id)));
}

这对我的大多数组件都很有效,但在一个组件中,我事先知道
id
-s,只想显示id-s1、2、9、18的4个产品。我想这样调用这个方法:
getProductsById([1,2,9,18])
)。我只知道如何订阅这两个观测值,但我如何才能一劳永逸地获得这4个产品(而不需要价值流)?我一定错过了一些基本的讲座。

您可以在
服务
构造函数中调用函数,在获得结果后,将该结果设置为
级别变量
staticProducts:Products[]

每当您想使用
staticProducts
时,通过
this.demoService.staticProducts
注入服务并直接使用

服务

@Injectable()
出口类出口服务{
产品:产品【】;;
构造函数(…){
//启动时获取静态数据
这个.getProductsById([1,2,9,18]);
}
GetProductsById(ID:number[]):可观察{
返回此文件。getProducts()
.map(products=>products.filter(products=>ids.includes(product.id)))
.订阅(res=>{
这是staticProducts=res;
});
}
...
}

如果您只想获取一些值,并将它们粘贴到一个变量中,而不需要可观察的变量。 从组件中,您可以像这样调用GetProductById:

service.getProductByIds([1,2,9.8]).take(1).subscribe(x => {
   this.variableWithProducts = x;
});

这些值是静态数据吗?是的,这些产品一直都是相同的,具有相同的id-s,我只是在应用程序中对它们进行过滤。剂量是您问题的答案谢谢大家!普洛奇,谢谢你,这很有道理。现在我正在组件(而不是服务)中进行所有订阅,所以我希望重构一切不会太多。因为我有很多其他的过滤方法(例如,基于不同类型的产品/搜索/收藏/等等),我必须想一想如何重新处理这个问题。