2017-09-11 24 views
1

ich habe ein angular2 Programm, in dem ich möchte Daten einer Komponente aktualisieren, wenn ein Klick auf eine andere Komponente hergestellt wird. Ich habe einen Dienst, in dem ich zwei Methoden ein für die Aktualisierung von Daten und anderen Daten für immer gemacht habe.Abonnement nicht angular2 Arbeits

mein Dienst ist als

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; 
    } 
} 

in meiner Komponente folgt a wo Klick gemacht wird. Ich habe diese Funktion, um Daten zu aktualisieren.

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

und in der Komponente b ich habe es auf diese Weise gezeichnet.

ngOnInit() { 
debugger; 
    this.subscription = this._dataserviceService.getMessage().subscribe(message => { this.message = message; 
    console.log(this.message) 
    debugger; 
    }); 
    } 

Wenn ich das Abonnement in der gleichen Komponente, funktioniert es gut, aber in anderen Komponente es keine Daten aktualisiert. Jede Hilfe wäre willkommen.

bearbeiten Nach meinem Verständnis ist das Hauptproblem, dass meine Teilnehmerkomponente geladen wird, nachdem der Dienst initialisiert wird.

Antwort

1

Versuchen Sie getMessage() Funktion durch Ersetzen:

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

Es scheint, dass ab jetzt, Ihr getMessage(), nicht ein beobachtbares Objekt zurück, das würde erklären, warum die Methode in ineffektiv abonnieren.

+0

Ich habe versucht, schon. Auch die Subjektklasse ist eine Kindklasse der beobachtbaren Klasse und es spielt keine Rolle, ob ich sie analysiere oder nicht. – Usama

+0

Ich habe genau den gleichen Code (verschiedene Variablennamen aber) in der eckigen App, an der ich gerade arbeite und es scheint zu funktionieren ... Entschuldigung, wenn Sie es bereits getan haben, aber Sie haben das überprüft ist in Ihrer app.js-Datei korrekt eingerichtet (dh importiert und zum Provider-Array hinzugefügt) sowie in der b-Komponente importiert? –

+0

Wenn ich auf Ihre letzte Änderung zurückblicke, vermute ich, dass das Problem tatsächlich nicht in dem von Ihnen geposteten Beispiel liegt –