通过可观察的消息传递不起作用

时间:2016-05-13 07:53:02

标签: angular

这里有一个plnk,http://plnkr.co/edit/y7PZONWELeG4f2Ywbw4k

@Injectable()
export class MsgService{
// First solution sends nothing to the console in ChatList
private msgSource = new Subject<string>()

msgEvent$ = this.msgSource.asObservable()

// Second solution -> sends 'completed' in the ChatList comp
//chat_id;
//msg = Observable.of(this.chat_id)

sendMsg(id){
  this.msgSource.next(id)
  //this.chat_id = id
}}

我试图通过带有observable的服务将消息从子节点传递给父节点,但它不起作用。以下是https://angular.io/docs/ts/latest/cookbook/component-communication.html的示例(父级和子级通过服务进行通信)。我有2个解决方案 - 首先根本不提供任何线索,没有传递给控制台,第二个 - 完成订阅但我没有发送任何complete()消息。那么问题是什么呢?

1 个答案:

答案 0 :(得分:3)

如果要在组件之间共享服务,则只在共同的祖先上提供服务,而不是在要注入它的每个组件上提供服务。

在您将其添加到providers: [MsgService]的每个位置都会创建一个新的不同的实例,但您需要一个共享实例。

@Component({
  selector: 'messages',
  template: `<div>Message from {{id}} chat</div>`
  //providers: [MsgService]
})

export class Chat{