動作は期待されています。あなたはsrvc.Data
に加入してData
がBehaviorSubject
あるので、それは最も最近の放出された値を返すコンストラクタで
export class Sample1 {
constructor(public srvc:HeroService) {
this.srvc.Data.subscribe(data=> {
console.log(data);
});
this.srvc.GetData();
}
}
。 Data
をnull
と初期化すると、最初はデータがありません。
コンストラクタでは、this.srvc.GetData()
と呼び出すと、イベントが発行され、サブスクリプション(前の行)で受信されます。
移動して戻ると、Sample1
が再び初期化され、コンストラクターが実行されます。まず、srvc.Data
を購読しています。前回の呼び出しでGetData()
(最初にHeroesにナビゲートしたとき)からReceived Data
という最後に出力された値を取得します。
次はthis.srvc.GetData()
への呼び出しで、もう一度Received Data
が発行され、サブスクリプションでこの値が渡されます。
回避策
は、あなたの代わりに私の答えで提案された回避策がある場合、私は知らない
@Injectable()
export class HeroService {
Data: BehaviorSubject<RepairOrder> = new BehaviorSubject(null);
constructor() {
this.GetData();
}
GetData(){
this.Data.next('Recieved Data');
}
DestroySubject(){
//alert('hi');
}
}
Plunker example
のようなサービスに
this.srvc.GetData();
への呼び出しを移動することができ、それを修正するにはあなたが欲しいもの。あなたが解決しようとしている実際の問題についてより多くの情報を提供すれば、私はより良い解決策を提供できるかもしれません。 –