【问题标题】:Unable to subscribe angular service method in component无法在组件中订阅角度服务方法
【发布时间】:2017-06-24 07:07:48
【问题描述】:

我想从我的服务中调用具有间隔条件的组件方法。我正在尝试使用 rxjs 可观察但不知何故无法订阅组件中可观察的服务,请帮助我这里缺少什么。提前致谢。 这是我的服务和组件代码 sn-ps。

服务

private dateArray$: Subject < any > ;
public obserableObjects: {
  setDateWatch$: Observable < any > ;
};
constructor() {
  this.dateArray$ = new Subject < any > ();
  this.obserableObjects = {
    setDateWatch$: this.setDateWatch$.asObservable()
  };
);
public initservice() {
  this.dateArray$.next('test');
}

组件:

   private dateInf$: Observable<any>;
   constructor() {
      @Inject(Service) private service: Service) {
      this.dateInf$ = this.service.obserableObjects.setDateWatch$;
      console.log(this.dateInf$);
      console.log("***********************************");
      this.dateInf$.subscribe((data) => {
        console.log(data);
      });
    }

【问题讨论】:

  • 您的服务构造函数似乎没有正确设置对象:setDateWatch$: this.setDateWatch$.asObservable() 而不是 `setDateWatch$: this.dateArray$.asObservable()`。你的组件注册到一个永远不会获得任何值的可观察对象。
  • 那仍然没有解决问题,仍然订阅没有被调用。我已更改为 'setDateWatch$: this.dateArray$.asObservable()'
  • 订阅者还是处理者?
  • 我已根据您的建议更新了 obervable 定义,但仍然无法调用组件订阅。
  • 我想我知道它是什么,您在发出值后订阅。尝试将 dateArray$ 从 Subject 更改为 BehaviorSubject 或更改为大小为 1 的 ReplaySubject

标签: typescript rxjs observable angular2-services


【解决方案1】:

@Meir 指出,您有一个错误;在服务构造函数中,更改

setDateWatch$: this.setDateWatch$.asObservable()

setDateWatch$: this.dateArray$.asObservable()

现在一切都已正确接线。您仍然看不到任何输出,因为没有任何东西被推入Subject。因此,将以下行添加到组件构造函数的底部,或订阅后的任何位置:

this.service.initService();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-20
    • 2018-01-18
    • 2018-03-01
    • 2019-06-26
    • 1970-01-01
    • 2019-06-06
    • 2017-11-26
    • 1970-01-01
    相关资源
    最近更新 更多