这是我需要在应用程序各个部分中订阅的两种方法:
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)));
}
这对我的大多数杂物都很有效,但是在一个组件中,我事先知道id
-s,只想显示ID为1、2、9、18的4种产品。我想像这样调用方法:getProductsByIds([1, 2, 9, 18])
)。我只知道如何订阅这两个可观察变量,但是我如何才能一劳永逸地获得这4个产品(不需要价值流)?我一定错过了一些基础课。.
答案 0 :(得分:1)
您可以在service
构造函数中调用该函数,并在获取结果后,将该结果设置为class
级变量staticProducts: Products[]
。
只要您想使用staticProducts
,请注入服务并直接由this.demoService.staticProducts
使用
服务
@Injectable()
export class DemoService {
staticProducts: Products[];
constructor(.....) {
// get static data on startup
this.getProductsByIds([1, 2, 9, 18]);
}
getProductsByIds(ids: number[]): Observable<Products[]> {
return this.getProducts()
.map(products => products.filter(products => ids.includes(product.id)))
.subscribe(res => {
this.staticProducts = res;
});
}
...
}
答案 1 :(得分:0)
如果您只想获取一些值并将其粘贴到没有Observable的变量中。 从您的组件中,您可以像这样调用getProductByIds:
service.getProductByIds([1,2,9.8]).take(1).subscribe(x => {
this.variableWithProducts = x;
});