我试图创建自己的可观察服务,但是当我从服务获取初始数据后,服务的任何更新都不会传播给任何订户。服务看起来像这样:Angular2 Observable BehaviorSubject服务不起作用
import { Injectable } from '@angular/core';
import { Observable, BehaviorSubject } from 'rxjs/Rx';
@Injectable()
export class DataService {
keys : number[] = [4,5,1,3,2];
private data :BehaviorSubject<number[]> = new BehaviorSubject(this.keys);
constructor() {};
public setKey(i:number, val:number) :void {
this.keys[i]=val;
this.data.next(this.keys);
}
public getData() :Observable<number[]> {
return new Observable(fn => this.data.subscribe(fn));
}
public getKeys() :number[] {
return this.keys;
}
}
使用服务的组件获取初始数据就好了。该组件在构造函数中获取其数据:
constructor(public dataService: DataService) {
dataService.getData().subscribe(data => {
console.log("Gotcha!");
this.data.datasets[0].data = data)
});
};
它在控制台日志中给出一个Gotcha。但是,在用其他地方的setKey(2,3)更新数据之后,我期待着这个.dat.next(this.keys)。 将数据发送给所有订户,并且数据将在该组件内相应地更新。但没有数据发送给用户。
我以为我觉得Observables出来,但请不要友好,如果我在这里错过了点;)任何指针在正确的方向将不胜感激!
听起来像你提供的服务不止一次,这导致不同的组件获取不同的实例。 –
在模块中工作时应采用什么方法。我有类似的服务。我的一些组件(在不同的模块中)在auth服务中订阅observable,当它发生变化时接收数据,但其他组件不收到数据。例如。当我的登录(btn)组件在观察者上发出下一个时,登录组件会看到更改,但是我的标题和侧栏组件在订阅时不会发生,我认为它与延迟加载或缓存或一些父母的孩子问题.. pff – webmaster
@GünterZöchbauer感谢这!我作为组件的一部分和父模块提供服务。这让我疯狂! – jminuscula