[英]How to call function from child component when parent component data has loaded (Angular 5)
[英]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.