該行爲是預期的。
export class Sample1 {
constructor(public srvc:HeroService) {
this.srvc.Data.subscribe(data=> {
console.log(data);
});
this.srvc.GetData();
}
}
在您訂閱srvc.Data
構造函數和,因爲Data
是BehaviorSubject
它返回最近發出的價值。您初始化Data
與null
,因此起初沒有數據。
然後在構造函數中調用this.srvc.GetData()
這會導致事件被髮送並被訂閱接收(之前的行)。
如果您離開並返回,則Sample1
會再次初始化,並執行構造函數。第一件事是訂閱srvc.Data
。並且它獲得最後發射的值,即從先前呼叫的Received Data
到GetData()
(當我們第一次導航到英雄時)。
接下來是呼叫this.srvc.GetData()
,它再次發出Received Data
並且訂閱獲得該值。
解決方法
要解決它,你可以在呼叫轉移到this.srvc.GetData();
的服務,而不是像
@Injectable()
export class HeroService {
Data: BehaviorSubject<RepairOrder> = new BehaviorSubject(null);
constructor() {
this.GetData();
}
GetData(){
this.Data.next('Recieved Data');
}
DestroySubject(){
//alert('hi');
}
}
Plunker example
我不知道如果我的回答所提出的解決方法是你想要什麼。如果您提供更多關於您嘗試解決的實際問題的信息,我可能會提供更好的解決方案。 –