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
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
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. –
Wie haben Sie diesen Service, Modulebene oder Komponentenebene bereitgestellt? – Alex