2016-07-21 1 views
0

J'ai deux composants qui doivent être connectés via Observable().Observable ne déclenche pas

Dans le premier je déclare

@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 est l'événement lié au modèle

et dans le second

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

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

Cependant, l'événement ne soit pas émis. Mais quand j'émets événement en classe deux au lieu de la classe one = i comprennent

this.childClass.registerChangeConfirmed(true) 

en classe deux cas se déclenche. Pourquoi cela ne marche-t-il pas lorsque je l'invoque en classe 1?

+0

Seulement pour '@Output()' dans les composants et les directives. Voir aussi http://stackoverflow.com/a/34402436/217408 –

+0

Le 'One' est un composant ou un service? Merci! –

+0

@ThierryTemplier en fait, One est à la fois – Johnyb

Répondre

0

Ne pas fournir le service One sur le composant. De cette façon, chaque instance de composant aura sa propre instance One. Si vous le fournissez à un parent commun (AppComponent), il obtiendra une instance partagée. Angular2 DI maintient une instance (singleton) par fournisseur. `EventEmitter` ne doit pas être utilisé dans les services.

+0

Vous ne voulez pas ajouter des fournisseurs: [Un] à la classe de deux composants, mais à leur parent? Si oui, cela ne résout pas le problème (mais pourrait être utile, merci pour cela) – Johnyb

+0

Avez-vous vérifié 'onMsg()' est effectivement appelé? Pouvez-vous s'il vous plaît ajouter le code qui montre comment vous le faites? –

+0

Où incluez-vous 'this.childClass.registerChangeConfirmed (true)'. Il est difficile de voir ce qui se passe quand on ne voit que des fragments mais pas comment ils sont réellement liés. –