Angular2 Observable BehaviorSubject服务不起作用

前端之家收集整理的这篇文章主要介绍了Angular2 Observable BehaviorSubject服务不起作用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试创建自己的可观察服务但在从服务获取初始数据后,对服务的任何更新都不会传播给任何订阅者.服务看起来像这样: @H_403_1@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; } }

使用该服务的组件获得初始数据就好了.该组件在构造函数获取其数据:

@H_403_1@constructor(public dataService: DataService) { dataService.getData().subscribe(data => { console.log("Gotcha!"); this.data.datasets[0].data = data) }); };

这给了控制台日志中的一个Gotcha.但是在用其他地方的setKey(2,3)更新数据后,我期待着
this.data.next(this.keys);
向所有订户发送数据,并相应地在该组件内更新数据.但没有数据发送给订阅者..

我以为我想出了Observables,但如果我在这里错过了点,请不要友好;)任何正确方向的指针将不胜感激!

每次发出一个值时,都应该创建一个新对象,而不是发出相同的变异对象.这将保护您免受更改检测问题的影响.最好总是在更改它时为this.keys分配一个新的对象. @H_403_1@this.data.next([...this.keys]);

你可以在这里使用asObservable()

@H_403_1@public getData(): Observable<number[]> { return this.data.asObservable(); }

还要检查GünterZöchbauer所说的内容.您是以单身人士的身份提供服务吗?

猜你在找的Angularjs相关文章