簡體   English   中英

從 sessionStorage 加載數據時,Angular 組件不會從訂閱的服務接收數據

[英]Angular component does not receive data from subscribed service when data is loaded from sessionStorage

在我的 angular 應用程序中有一個服務,它接收一個對象,將它添加到一個對象列表中,將更新的對象數組保存到sessionStorage並將更新的列表發送到另一個訂閱更改的應用程序。 問題是訂閱的組件在用戶刷新頁面后沒有從服務接收數據。 我看到該服務已從sessionStorage檢索數據,更新本地數組並在所有訂閱者next分派新加載的數據,但是訂閱的組件不會觸發訂閱。

現在為一些代碼:

    //some.service.ts
      private dataSub = new Subject<Data[]>();
      public dataObservable$ = this.dataSub.asObservable();
      private data: Data[] = [];
    .
    .
    .
      constructor() { 
        const data = sessionStorage.getItem("data");
        if(data){
          this.data = JSON.parse(data);
          this.dataSub.next(this.data);
        }
      }
   .
   .
   .
   public someFunction(){
      sessionStorage.setItem("data", JSON.stringify(this.data));
   }

訂閱some.service更改的some.service

//some.component
private dataSubscription: Subscription = new Subscription();
public data: Data[] = [];
constructor(private someService: SomeService) { }
ngOnInit(): void {
   this.dataSubscription = this.someService.dataObservable$.subscribe(newData => {
  this.data= newData ;
 })
}

Angular 構建這些類的順序是服務,然后是組件。

由於您的主題不重播值(至少默認情況下),組件將獲得未來值,而不是當前值。 這是因為該主題已創建、添加到然后訂閱。 您可以嘗試使用 BehaviorSubject 或為您的主題添加重播。 這樣組件在訂閱時將獲得當前值。

暫無
暫無

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

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