2017-06-30 2 views
0
zugewiesen

Hier ist mein Code Ich versuche, Daten in Variable 'Benutzer' von SetUserDetails-Funktion, die eine http-Provider-Funktion fetchUserDetails, die Daten zurückgibt aufruft zuweisen wie erwartet. Der Befehl getUserDetails gibt einen Nullwert aus.Ionic 2 - Zugriff auf Wert von einem http-Provider durch andere Funktionen in angular 2

@Injectable() 
export class UserDetailsProvider { 
public userChanged = new EventEmitter(); 
private userUrl = apiUrl+'get_user_details_api'; // URL to web api 
public user : any; 

constructor(public http: Http, public authService: AuthServiceProvider, public events: Events) { 
this.user = null; 
}// end of constructor 



fetchUserDetails(){ 
return new Promise((resolve, reject) => { 
    let headers = new Headers(); 
    headers.append('jwt', localStorage.getItem('token')); 
    this.http.post(apiUrl+'get_user_details_api', {}, {headers: headers}) 
     .subscribe(res => { 
     resolve(res.json()); 
     }, (err) => { 
     reject(err); 
     }); 
}); 
}// end of get user details 

setUserDetails(){ 

    this.fetchUserDetails().then((result) => { 
    this.user = result; 
    console.log(result); // Added this as requested, I told you it's working 
    this.events.publish('UserLogged', this.user); 
    }); 
}// end of function 

getUserDetails(){ 
    //console.log(this.user); commenting this out to show the log of http then result 
}// end of function 

Die Veranstaltung veröffentlicht die this.user und kann von App-Komponente zugegriffen werden kann, dass auch funktioniert gut. Ich möchte, dass die Benutzerdaten einmal bei der Anmeldung beim Aufruf der seUserDetails festgelegt werden und auf die Benutzerdaten überall zugegriffen werden kann, indem getUserDetails nur durch Rückgabe von this.user aufgerufen wird, aber nicht darauf zugreifen kann.

Dort wird die Ausgabe für Sie in der Konsole ist ...

Angular is running in the development mode. Call enableProdMode() to enable the production mode. 
VM17281 main.js:60356 Native: tried calling SplashScreen.hide, but Cordova is not available. Make sure to include cordova.js or run in a device/simulator 


VM17281 main.js:33868 Object {user_id: "MEM17042246C9FE2C039", name: "aryan", is_active: "1", is_phone_verified: "1", email: "[email protected]"…}email: "[email protected]"ifile_name: "1705051493994229.jpg"ipath: "uploads/MEM17042246C9FE2C039 /profile_pic"is_active: "1"is_phone_verified: "1"login_count: "0"name: "aryan"user_id: "MEM17042246C9FE2C039"user_type: "3"__proto__: Object 
+0

Könnten Sie ein 'console.log (result)' in Ihrem 'then' in der Funktion' setUserDetails' hinzufügen? Nur um zu sehen, ob Sie etwas rules bekommen oder nicht (ich nehme an, wenn es nicht funktioniert) – trichetriche

+0

Ja, ich habe es versucht ... Es funktioniert. Sogar console.log (this.user) in den seUserDetails funktioniert ebenfalls. Ich habe bereits erwähnt, dass events.publish funktioniert. –

+0

Wie haben Sie diesen Service, Modulebene oder Komponentenebene bereitgestellt? – Alex

Antwort

0

Könnten Sie das versuchen?

fetchUserDetails(){ 
let headers = new Headers(); 
headers.append('jwt', localStorage.getItem('token')); 
return this.http.post(apiUrl+'get_user_details_api', {}, {headers: headers}) 
     .toPromise() 
     .then(
      res => Promise.resolve(res.json()), 
      err => Promise.reject(err) 
    ); 
}// end of get user details 
+0

Ich habe kein Problem in FetchUserDetails Funktion funktioniert es gut. Das Problem ist, dass die Funktion setUserDetails die Benutzerdaten, die von der fetchUserDetails-Funktion zurückgegeben werden, an this.user vergibt. Das ist nur in setUserDetails, aber nicht in getUserDetails verfügbar. –

+0

Wenn events.publish funktioniert und Ihre Benutzer null sind, gibt Ihr http-Aufruf tatsächlich null zurück. – trichetriche

+0

Events.publish funktioniert bedeutet, dass der Abonnent den Wert des Benutzers in page.html dude erfolgreich anzeigt, es war null, dann wird auf der Profilseite der Benutzername nicht angezeigt. Und für Ihren Frieden habe ich die Konsolenausgabe von result hinzugefügt. –

Verwandte Themen