BehaviorSubjectにいくつかの問題があります。ここで、共有の三の成分のサービス:角2が共有サービスで購読に失敗する
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
@Injectable()
export class StageEndService {
private stageNumber = new BehaviorSubject<number>(0);
private stageNumberPassed = new BehaviorSubject<number>(0);
stageNumber$ = this.stageNumber.asObservable();
stageNumberPassed$ = this.stageNumber.asObservable();
announceStageNumber(num) {
this.stageNumber.last(num);
}
announceStageNumberPassed(num) {
this.stageNumberPassed.last(num);
}
}
ここでサービスの値を変更する二つの成分のいずれかの最初の部分は次のとおり
import { StageEndService } from './../../../common/services/stage-end.service';
@Component({
...
providers: [StageEndService]
})
...
private value = 6;
constructor (private stageEndService: StageEndService) {
this.stageEndService.announceStageNumber(value);
}
第二の成分は類似しているが、stageNumberPassedの値を変更します。私はサブスクライブが、失敗しようとしている私の最後のコンポーネントで
(にconsole.logを返す0):は
import { StageEndService } from './../../../common/services/stage-end.service';
// there's no provider here since it's not necessary if I'm correct
constructor(private stageEndService: StageEndService) {}
ngOnInit() {
this.stageNumberSubscription = this.recruitmentEndService.stageNumber$.subscribe(response => {
this.stageNumber = response;
});
問題だんアイデア。サービスで機能するために渡された値をログに記録すると、正しい数値が返されます。それが重要なのかどうか分からない。最後のコンポーネント(私が購読しようとしているところ)は、最初に新しい価値を設定している最初のコンポーネントの孫である。
でなければなりません '最後の(...)'行うことになって?私には、あなたが 'next()'を使うことを意味する継ぎ目です。 –
私は.last()メソッドを認識していないので、単に.next()または.emit()で置き換えると言っています。 – micronyks
d方法では、どちらのバージョンでangular2を使用していますか? – micronyks