RxJS 的 BehaviorSubject
利用 RxJS 的 BehaviorSubject,將原本儲存在各 Component 中的狀態,集中儲存在 Service 中,以方便各階層的元件透過 DI 存取,而不需要透過元件間的互動來傳遞狀態數值。
Api Service 獨立管理
Configures Angular’s HttpClient service to be available for injection.
配置 Angular 的 HttpClient 服務以供注入。
provideHttpClient
src/app/app.config.ts
錯誤訊息:ERROR NullInjectorError: R3InjectorError(Environment Injector)[_ProductsService -> _ApiService -> _HttpClient -> _HttpClient]:

處理方式如下
引入 provideHttpClient
1 | import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; |
Injectable: 裝飾器將某個類別標記為可用,可以作為依賴項提供和注入。
Observable:
透過網路傳輸來取得,則是屬於「非同步任務」,理由是需要連線到伺服器,使用者的應用程式必須等待伺服器回傳資料。
參考資料
1 | //web-api.service.ts |
http-provider.service.ts
1 | import { Injectable, inject } from '@angular/core'; |
頁面的引入
1 | + import { HttpProviderService } from '../api/http-provider.service'; |
使用 BehaviorSubject 的狀態儲存器
Subject
Subject 可以接受 Observer 的訂閱。
也可以用來訂閱其他的 Observable,所以他本身既是 Observable 又是 Observer。
BehaviorSubject 繼承自 Subject具有同樣的功能,然而兩者最主要的差異,在於:
- BehaviorSubject 可以接受給定初值,而 Subject 不可以。
- Subject 只會在被訂閱之後,而所訂閱的 Observable 有發出新值時,才會做通知。而 BehaviorSubject 會在每一 Observer 訂閱時,對其發出目前已收到的最新值。
參考資料