2017-08-25 75 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()並訂閱它。希望這可以幫助!如果有,請接受我的回答。