【发布时间】:2020-06-07 23:40:15
【问题描述】:
我确实有以下服务:
export class TestService {
constructor() { }
private _schema = new BehaviorSubject("User");
currentSchema = this._schema.asObservable();
setSchema(schema: string) {
this._schema.next(schema);
}
}
当我订阅 observable 并在订阅后更改值时,一切正常,但是当我在更改值后订阅另一个组件时,我收到的是初始值而不是新的设置值。
因此,当我订阅 ngOnInit() 中的 observable 并在同一组件中设置下一个值时,它会起作用。但我想在稍后创建的另一个组件中接收下一个值。
我正在使用这样的服务:
ngOnInit() {
this.testService.currentSchema.subscribe(x => {
console.log('DETAIL >> ' + x);
});
}
我不知道为什么会发生这种情况,因为 BehaviorSubjects 的感觉即使在订阅后也能获得价值。
【问题讨论】:
-
听起来您的组件正在使用不同的服务实例。服务是否设置在任一组件的 providers 数组中?你能在 stackblitz 中提供一个现场演示吗?
-
是的,服务设置在
app.module.ts的providers数组中 -
能否提供现场演示。
-
您的代码应该与
BehaviorSubject一起使用,问题可能出在setSchema()函数在ngOnInit()运行后被调用 -
我刚刚建立了一个演示项目,一切正常。我不知道我的问题出在哪里。一个组件必须使用该服务的另一个实例,但我不知道为什么会这样。
标签: angular observable behaviorsubject