加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular2 Observable BehaviorSubject服务不起作用

发布时间:2020-12-17 07:52:03 所属栏目:安全 来源:网络整理
导读:我正在尝试创建自己的可观察服务但在从服务获取初始数据后,对服务的任何更新都不会传播给任何订阅者.服务看起来像这样: import { Injectable } from '@angular/core';import { Observable,BehaviorSubject } from 'rxjs/Rx';@Injectable()export class Data
我正在尝试创建自己的可观察服务但在从服务获取初始数据后,对服务的任何更新都不会传播给任何订阅者.服务看起来像这样:
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)更新数据后,我期待着
this.data.next(this.keys);
向所有订户发送数据,并相应地在该组件内更新数据.但没有数据发送给订阅者..

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

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

你可以在这里使用asObservable()

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读