[英]Angular2: Subscribed Method is not fired when called from another component
我正在嘗試從一個組件更新數據,並將其接收到另一個組件中並使用Subject
和Observables
。
我能夠將數據存儲在datShareService
,但是一旦數據更新,我的getData
永遠不會被調用。
我有以下代碼結構
fileComponent.ts嘗試在 dataShareService 中存儲一些數據
{
...
//call dataShareService and update data
this.dataShareService.updateData(this.things);
...
}
dataShareService.ts將獲取數據並在詢問時返回
{
...
private outputs = new Subject<any>();
constructor() { }
getData(): Observable<any>{
console.log('getData', this.outputs.asObservable());
return this.outputs.asObservable();
}
updateData(outputs:any): void{
this.outputs.next(outputs);
console.log('datashare', this.outputs);
}
...
}
已訂閱getData
方法的resultsComponents.ts
{
...
public results : any;
private sub : Subscription;
constructor(private dataShareService: DatashareService) {
console.log(this.dataShareService);
}
ngOnInit() {
this.sub = this.dataShareService.getData().subscribe(output => {
this.results = output;
});
console.log('visual result arrived', this.results);
}
...
}
我幾乎可以肯定,問題在於調用這些方法的順序,但不確定具體在哪里。
如果你沒有得到任何價值,那么你必須改變你的 dataShareService.ts 如下
{
...
private outputs = new Subject<any>();
constructor() { }
getData(): Observable<any>{
console.log('getData', this.outputs.asObservable());
return this.outputs.asObservable();
}
updateData(outputs:any): void{
this.outputs.next({text:outputs});
console.log('datashare', this.outputs);
}
...
}
你已經把console.log('visual result arrived', this.results);
在您的訂閱方法之外。
把你的console.log('visual result arrived', this.results);
在 subscribe 方法中,每當數據更新時,它都會打印到控制台。
下邊是
使用 ReplaySubject 而不是 Subject,這樣它也會發出以前的值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.