2017-08-07 5 views
0

Ich versuche, den Wert eines Objekts aus Daten zu initialisieren, die von einem (Firebase) Datenspeicher zurückgegeben werden. Ich kann sehen, dass die Daten zurückgegeben werden, aber ich kann sie keiner lokalen Variablen zuweisen. Ich lehre mich Typoskript, Angular 2 und Firebase, so könnte dies eine ‚duh‘ Frage ...Angular 2 Konstruktor ngOnInit undefined Eigenschaft TypeScript

import ProfileProvider from ../providers/profile 

@Component({...}) 
class Profile { 
userProfile:any 

constructor (public profileProvider: ProfilePRovider) {} 

ngOnInit() { 
    this.profileProvider.getUSerProfile().on ("value", function(snap) { 
    console.log(snap.val()); // this works, prints all my data correctly 
    this.userProfile = snap.val(); // this fails, "cannot set property userProfile of undefined" 
    } 
} 
} 

Jede Hilfe ist willkommen! Danke!

+0

dies auch [? Wie man richtig einen „binden“ tun in angular2 Typoskript] (https://stackoverflow.com/a/ 45136760/2545680) –

Antwort

3

Dies liegt daran, this bezieht sich nicht auf die Komponente selbst. Entweder binden die Funktion oder verwenden fat arrow => Funktion:

...getUserProfile().on('value', function(snap){ 
    }.bind(this)) 

oder

...getUserProfile().on('value', snap => { 
    // this is properly bound here 
    }); 
+0

Vielen Dank! Ich bin neu in JavaScript/Type Script, das hat mich verrückt gemacht ... Kein Fan von einer der beiden Sprachen ... – banncee

+0

Nun, sei geduldig, du wirst es bekommen und es genießen. – Meir

+0

Ich kann es schließlich bekommen, ich bin mir nicht sicher, ob ich es genießen werde ... :) – banncee

Verwandte Themen