簡體   English   中英

Angular 8:無需訂閱可觀察對象即可獲取值

[英]Angular 8: Get values without subscription to an 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-s getProductsByIds([1, 2, 9, 18]) 4 個產品。我想像這樣調用方法: getProductsByIds([1, 2, 9, 18]) )。 我只知道如何訂閱這兩個 observable,但是我如何才能一勞永逸地獲得這 4 個產品(不需要值流)? 我一定錯過了一些基本的講座..

您可以在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;
      });
  }

  ...
}

如果您只想獲取一些值並將它們粘貼到沒有 Observable 的變量中。 從您的組件中,您可以像這樣調用 getProductByIds:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM