我有一個如下所示的服務:
private sharedData = new BehaviorSubject<any>(null);
constructor() { }
getData(){
return this.sharedData;
}
setData(data:any){
this.sharedData.next(data);
}
}
我有我的 app.component.ts 使用此服務:
this.http.post("url",quote).subscribe(s=>{
this.dataService.setData(s);
});
這是我使用它的組件(接收器):
constructor(private dataService:DataService) { }
ngOnInit(): void {
const data = this.dataService.getData();
alert(data) }
資料包含字串,在我的 app.component.ts 中我可以記錄并查看它,但似乎警報和服務之間存在競爭,當警報觸發拳頭并顯示 [object][object] 任何想法?
uj5u.com熱心網友回復:
在這種情況下,getSharedData()回傳行為主體本身,因此在這種情況下明智的做法是訂閱它以接收您在呼叫setData.
在接收器組件中:
ngOnInit(): void {
this.dataService.getData().pipe(
filter(data => !!data)
).subscribe(data => {
alert(data)
});
}
uj5u.com熱心網友回復:
當你這樣做時,你沒有得到最新的值,你正在回傳BehaviourSubject物件
getData(){
return this.sharedData;
}
你需要的是訂閱你的 sharedData BehaviourSubject
sharedData.subscribe(console.log) ;
這應該顯示您從 post 方法收到的資料。
基本上你對資料到達時做出反應,當你認為資料準備好時你不會呼叫方法。
有關更多詳細資訊,請查看此示例:https : //www.learnrxjs.io/learn-rxjs/subjects/behaviorsubject
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/354077.html
標籤:javascript 有角的
上一篇:JS中物件陣列的分組問題
