【发布时间】:2017-01-20 20:50:35
【问题描述】:
我对 BehaviorSubject 有一些问题。以下是三个组件的共享服务:
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;
});
不知道问题出在哪里。当我记录传递给服务中的函数的值时,它会返回正确的数字。不知道这是否重要,但以防万一:最后一个组件(我尝试订阅的地方)是我第一次设置新值的第一个组件的孙子。
【问题讨论】:
-
last(...)应该做什么?对我来说,你打算使用next() -
我不知道 .last() 方法,所以只是说用 .next() 或 .emit() 替换它。
-
顺便问一下,你用的是哪个版本的angular2?
-
@micronyks 替换为 .next() 和 .emit()。两者都不起作用。我正在使用 RC5。
标签: angular typescript observable