在我的角度應用程式中,我想在我的每個 http 請求中包含用戶令牌,所以據我所知,最好創建一個服務,這樣我就不必每次都為我的 http 請求手動包含我的令牌或其他引數。代碼可能是這樣的:
export class FacilityService{
constructor(private http: HttpClient) {
}
const httpOptions = {
header: new HttpHeaders({
Authorization: `bearer ` JSON.parse(localStorage.GetItem('user')).token
})
}
load(): Observable<any> {
return this.http.get<any>(
`${environment.rootUrl}/facility/getFacility`, httpOptions
);
}
}
但是,我也學會了使用 Service 來存盤狀態。所以我們不必每次都向服務器請求。代碼可能是這樣的:
export class FacilityService{
facility: Facility[] = [];
constructor(private http: HttpClient) {
}
const httpOptions = {
header: new HttpHeaders({
Authorization: `bearer ` JSON.parse(localStorage.GetItem('user')).token
})
}
load(): Observable<any> {
if(this.facility.length > 0) return of(this.facility);
return this.http.get<any>(
`${environment.rootUrl}/facility/getFacility`, httpOptions
).pipe(map(facility =>
this.facility = facility;
return facility;
));
}
}
2個問題:
如果我想為我所有物體的所有 HTTP 請求創建一個本地狀態?每次我先檢查本地資料,如果它不存在,我會從服務器請求。我將有設施服務、用戶服務、訂單服務。
我應該如何將所有這些服務合并到一個服務中,這樣我就不必為我的每個物體創建服務?例如,用戶資料和訂單資料也可以共享服務
uj5u.com熱心網友回復:
首先,如果您需要為每個HTTP 請求添加標頭或其他內容,我將創建一個攔截器;不使用某種父服務。
如果我想為我所有物體的所有 HTTP 請求創建一個本地狀態?每次我先檢查本地資料,如果它不存在,我會從服務器請求。
通常,我會將狀態管理與服務集成代碼分開,因此我用于訪問遠程服務器的代碼不會保存任何狀態。
對于本地快取,有一些型別的資料可以在本地快取內容,而其他型別的資料則不需要。對于那些需要它的人,您可以在服務和shareReplay()中使用 observable 。
我應該如何將所有這些服務合并到一個服務中,這樣我就不必為我的每個物體創建服務?例如,用戶資料和訂單資料也可以共享服務
我建議為所有物體創建單獨的服務。最有可能的用戶資料和訂單資料是不同的資料模式,具有不同的端點,我不確定它們之間會“共享”什么樣的東西,而這些東西還沒有封裝到 Angular 的 HTTPClient 類中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/515365.html
標籤:有角度的设计模式角度服务
