角度8:无需订阅可观察值即可获取值

时间:2019-12-30 17:02:11

标签: angular components observable

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

  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个产品(不需要价值流)?我一定错过了一些基础课。.

2 个答案:

答案 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;
});