У меня есть некоторые проблемы с 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 way, в какой версии вы используете angular2? – micronyks