从服务发布/获取数据并不像它应该的那样工作

时间:2017-05-23 09:51:24

标签: javascript angular typescript rxjs

为了传递几个组件的数据,我创建了一个服务:

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';

@Injectable()
export class Services {

  private messageSource = new BehaviorSubject<string>("lol");
  currentMessage = this.messageSource.asObservable();

  constructor() {
  }

  changeMessage(message: string) {
    this.messageSource.next(message);
    console.log(message);
  }

}

我创建了字符串messagesource,用于包含传递数据和Observable的当前消息。之后我创建了更改此数据的函数。

现在,在其中一个组件中的ngOnInit()中,我写道:

this.data.currentMessage.subscribe(message => this.message = message);

并在组件消息中定义:string save there message。

在我的功能中:

selectNews(news) {
  this.data.changeMessage("lol3"); // string for test
}

之后,我想在其他组件中获取此字符串

再次在ngOnInit中,我复制相同的行并定义消息。但是这里的控制台日志在函数make action ....之前显示了字符串....

问题是什么?

编辑 摆弄所有整个代码:

https://jsfiddle.net/fywdzz51/

1 个答案:

答案 0 :(得分:2)

您要为每个组件单独提供服务。这会在每个组件中创建不同的实例。你应该在整个模块的一个地方提供它