2017-09-11 1 views
1

J'ai un programme angular2 dans lequel je veux mettre à jour les données d'un composant lorsqu'un clic est fait sur un autre composant. J'ai fait un service dans lequel j'ai deux méthodes l'une pour mettre à jour les données et l'autre pour obtenir des données.Abonnement ne fonctionne pas angulaire2

mon service se présente comme suit

import { Injectable } from '@angular/core'; 
import { Subject } from 'rxjs/Subject'; 
import { Observable } from 'rxjs/Observable'; 
import { BehaviorSubject } from 'rxjs/BehaviorSubject'; 


@Injectable() 
export class DataserviceService { 

    public subject = new Subject<any>(); 

    sendMessage(message: any) { 
     debugger; 
     this.subject.next({ text: message }); 
    } 

    clearMessage() { 
     this.subject.next(); 
    } 

    getMessage(): Observable<any> { 
     return this.subject; 
    } 
} 

dans mon élément a où clic est fait. J'ai cette fonction pour mettre à jour les données.

onClick() 
    { 
     this._dataserviceService.sendMessage(this.getJsonData()); 
    } 

et dans le composant b je suis abonné cette façon. Si je fais l'abonnement dans le même composant, cela fonctionne très bien, mais dans d'autres composants, il ne met pas à jour les données. Toute aide serait appréciée. Selon ma compréhension, le problème principal est que mon composant d'abonné se charge après l'initialisation du service.

Répondre

1

Essayez de remplacer votre fonction getMessage() par:

getMessage(): Observable<any> { 
    return this.subject.asObservable(); 
} 

Il semble que ce moment, votre getMessage() ne retourne pas un objet observable, ce qui expliquerait pourquoi la méthode subscribe dans inefficace.

+0

J'ai déjà essayé cela. La classe sujet est également classe enfant de classe observable et peu importe si je l'analyse ou non. – Usama

+0

J'ai exactement le même code (noms de variables différentes mais) dans l'application angulaire sur laquelle je travaille actuellement et ça semble fonctionner comme prévu ... excuses si vous l'avez déjà fait, mais avez-vous vérifié que votre service est correctement configuré dans votre fichier app.js (importé et ajouté au tableau des fournisseurs) et importé dans le composant b? –

+0

En regardant en arrière votre dernière édition, je soupçonne que le problème n'est pas réellement dans l'échantillon que vous avez posté –