資料服務.ts
testData$ = new Subject<any>();
initData() {
this.getDataFromApi().subscribe((response) => {
this.testData$.next(response)
});
}
getInitData() {
return this.testData$;
}
父組件.ts
ngOnInit(): void {
this.dataService.initData();
}
child.component.ts
ngOnInit(): void {
this.dataService.getInitData().subscribe((response) =>
{
console.log(response);
})
}
在這種情況下,當我第一次訪問 child.component.ts 網站時,console.log 不會執行。它在我轉到另一個組件(我網站上的另一個選項卡)然后回傳到我有父組件和子組件的選項卡后執行。當我第一次訪問網站時,如何執行 console.log?
我試過我寫的。
uj5u.com熱心網友回復:
我建議這樣做:
private testData$
initData() {
this.testData$ = this.getDataFromApi().pipe(
shareReplay(1)
);
}
getInitData() {
return this.testData$;
}
這使您不必擔心時間,避免多層訂閱的反模式,并且不會暴露Subject.next()在您的服務之外。
uj5u.com熱心網友回復:
您應該將您的主題作為可觀察回傳并回傳相同的主題資料型別。
老的
getInitData() {
return this.testData$;
}
新的
getInitData() :Observable<any>{
return this.testData$.asObservable();
}
uj5u.com熱心網友回復:
為什么不在initDataService 的建構式中呼叫一次,組件只需訂閱testData$
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/529109.html
標籤:有角度的事件发射器主题
