2017-06-30 4 views
0

ich AngularFire2 bin mit einem Firebase-Objekt abzurufen:Fehler beim Aktualisieren ein AngularFire2 Objekt

// AuthService 
public getUserID(): Observable<string> { 
    return this.afAuth.authState.map(user => user ? user.uid : null) 
} 

// AccountService 
private profileInfo: FirebaseObjectObservable<any> 
constructor (private db: AngularFireDatabase, private authService: AuthService) { 
    this.profileInfo = authService.getUserID().flatMap(uid => { 
     return db.object(`Users/${uid}`) 
    }) as FirebaseObjectObservable<any> 
    // have to explicitly cast it or the compiler complains 
    // not sure if that's related 
} 

Dies scheint alles in Ordnung zu arbeiten, und ich kann die richtigen Daten von ihm lesen, aber wenn ich versuche, es zu aktualisieren, :

public changeProfileInfo (name: string) { 
    this.profileInfo.update({name: name}) 
} 

ich einen Laufzeitfehler erhalten, wenn die Funktion ausführt: TypeError: this.profileInfo.update is not a function. Was mache ich hier falsch?

Antwort

0

konnte ich manuell diese Arbeit bekommen es in der Karte zuweisen:

this.profileInfo = authService.getUserID().flatMap(uid => { 
    const profileInfo = db.object(`Users/${uid}`) 
    this.profileInfo = profileInfo 
    return profileInfo 
}) as FirebaseObjectObservable<any> 

ich mit dieser Lösung nicht zufrieden bin, fühlt es sich wirklich hack-ish, aber zumindest funktioniert es.

Update: nach weiteren Tests stellt sich heraus, dass dies einen Fehler auslöst, wenn Sie sich abmelden und wieder zurück, da es seinen Verweis auf die UID verliert. Mein bester Versuch einer Abhilfe ist noch hässlicher:

this.profileInfo = authService.getUserID().flatMap(uid => { 
    const profileInfo = db.object(`Users/${uid}`) 
    this.profileInfo.$ref = profileInfo.$ref 
    this.profileInfo.update = profileInfo.update 
    return profileInfo 
}) as FirebaseObjectObservable<any> 

(und wenn Sie andere Methoden verwenden möchten, Sie werden sie auch einzeln hinzufügen müssen)

Verwandte Themen