2017-08-25 74 views
0

我试图用主题无法使用Angular2主题

private onAdd = new Subject<any>(); 
onAdd$ = this.onAdd.asObservable(); 

this.onAdd.next(event); 

这些我写我的服务的双组分之间的通信组件之间进行通信:

我在里面ngOninit其他部件听他们这样

this.service.onAdd$.subscribe((alert) => { 
      console.log('Component--- ' + alert); 
     }); 

两件事情:

  1. this.onAdd.next(event); ---> undefined
  2. console.log('Component ---'+ alert); ---->没有打印

所以,我可以保证我的活动没有传达给其他组件,我无法弄清楚是什么问题。有谁能够帮助我。

+0

你不觉得'onAddAlerts $'应该被'onAdd $'取代,它应该开始工作! – micronyks

+0

@micronyks这是一个错字。 – Rohitesh

+0

你是否在组件中使用'providers:'''your-service']元数据属性? – micronyks

回答

0

除非您使用'ReplaySubject'或'BehaviorSubject',否则如果在组件订阅主题之前调用'next'方法,它将不会接收任何数据,直到再次调用下一个方法。

编辑 - 试试这个简单的工作plunkr例子 - http://plnkr.co/edit/34Zj0QB5chEYj7g1vRmN

在plunkr,你可以看到,如果你订阅了很多次增加价值,您的组件会自动收到的最后一个值,当你点击订阅按钮使用ReplaySubject。对于正常的主题,当您订阅时,只有再次单击“增量”按钮后才会显示该值。

如果你打电话

this.onAdd.next(event); 

再次组件订阅它之后,它应该接收数据。

或尝试更改为重播主题,所以当它接收到一个新的用户

private onAdd = new ReplaySubject<any>(); 

只要确保你导入

import { ReplaySubject } from 'rxjs/ReplaySubject'; 
+0

这不起作用 – Rohitesh

+0

你能提供更完整的代码吗?如果没有其他上下文,它很难排除故障。 – diopside

+1

好吧我会尽可能地把快照放到 – Rohitesh

0

尝试重构对象将发送最后的发射值你的服务就是这样。 myService.service.ts

其中u希望通过调用sendonAdd设置使用onAdd值
class MyService { 
private onAdd = new Subject<any>(); 

    sendonAdd(value) { 
    this.onAdd.next(value); 
    } 
    getonAdd(){ 
    return this.onAdd.asObservable(); 
    } 
} 

现在注入的组件此项服务()。在另一个组件中调用getonAdd()并订阅它。希望这可以帮助!如果有,请接受我的回答。