2016-07-21 25 views
0

我有兩個應通過Observable()連接的組件。可觀測不觸發

在第一個我聲明

@Injectable() 
export class One{ 
    private changeConfirmed = new Subject<boolean>(); 

    changeConfirmed$ = this.changeConfirmed.asObservable(); 
    public init$: EventEmitter<boolean>; 

    registerChangeConfirmed(category:boolean){ 
     alert('sending') 
     this.changeConfirmed.next(category); 
    } 

    onMsg(){ 
     this.registerChangeConfirmed(true); 
    } 
} 

onMsg的事件勢必模板

,並然而,事件沒有得到發出的第二個

Import { One } from './pat/to/it' 
@Component({ 
    providers:[One] 
}) 

export class two{ 
    constructor(private childClass : One){ 
     this.childClass.changeConfirmed$.subscribe(x => {alert(x)}) 
    } 
} 

。 但是,當我發出兩班,而不是一類事件= I包括

this.childClass.registerChangeConfirmed(true) 

兩個類的事件被觸發。當我從第一堂課調用它時,爲什麼它不工作?

+0

不應在服務中使用'EventEmitter'。僅適用於組件和指令中的@Output()。另請參閱http://stackoverflow.com/a/34402436/217408 –

+0

「一」是組件還是服務?謝謝! –

+0

@ThierryTemplier實際上,一個是 – Johnyb

回答

0

不要在組件上提供服務One。這樣每個組件實例將獲得它自己的One實例。如果你在一個共同父母(AppComponent)上提供它,那麼他們將獲得一個共享實例。

Angular2 DI爲每個提供者維護一個實例(單例)。

+0

你的意思是不添加提供者:[一]到第二類組件,但他們的父母?如果是這樣,這並沒有解決問題(但可能是有用的,謝謝你) – Johnyb

+0

你檢查了'onMsg()'實際上被調用嗎?你能否添加顯示你如何做的代碼? –

+0

你在哪裏包含'this.childClass.registerChangeConfirmed(true)'。當只看到片段時很難看到發生了什麼,但不知道它們實際上是如何相關的。 –