私は2つのコンポーネントと、2つのコンポーネントで共有される共有サービスを持っています。angular2 subjectは変更をサブスクライブしません
shared.service.ts
// ..... top level codes are skipped
private pickAnalysisForBubble = new Subject<any>();
analysisForBubble$ = this.pickAnalysisForBubble.asObservable();
mapToggleToPointOrBubble(value) {
this.pickAnalysisForBubble.next(value);
}
図(utility.component.html)でutility.component.ts
、両無線ボタン、1つは存在するが、予め選択され:
<input type="radio" name="rdbBubblePoint" class="rdbBubblePoint" value="Point" (change)="changeToPoint($event)"> Point<br>
<input type="radio" name="rdbBubblePoint" class="rdbBubblePoint" value="Bubble" (change)="changeToPoint($event)" checked="checked"> Bubble<br>
コンポーネント(utility.component.ts)には、クリックを取得する方法がありますイベント:(。私はshared.service
を輸入して、プロバイダとしてこれを追加しました)
changeToPoint(event){
# analysisInteraction is the shared service constructor
this.analysisInteraction.mapToggleToPointOrBubble(event.target.value);
}
map.component.ts
私はshared.service
を輸入し、コンストラクタを追加しました。その後、ngOnInit
でsubscribe
に変更しようとしましたが、が動作していません。
# analysisInteraction is the shared service constructor
this.analysisInteraction.analysisForBubble$.subscribe(
data => {
this.DrawType = data;
console.log("Drawtype fixed");
});
私はこのtutorialに基づいて変化を検出するsubject
を使用しています。私は間違っているの?
はい、両方のコンポーネントにプロバイダとして 'sharedService'を追加しました。 – Emu
サブコンポーネントの 'main.ts'ファイルに' sharedService'を追加しました。まだ動かない。どんな手掛かり? – Emu
これは問題です;-)この場合、各コンポーネントは独自のインスタンスを持ち、同じコンポーネントを共有しません。それは階層的インジェクタのためです。 –