【问题标题】:Error updating an AngularFire2 object更新 AngularFire2 对象时出错
【发布时间】:2017-06-30 17:23:54
【问题描述】:

我正在使用 AngularFire2 检索 Firebase 对象:

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

这一切似乎工作正常,我可以从中读取正确的数据,但是当我尝试更新它时:

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

函数执行时出现运行时错误:TypeError: this.profileInfo.update is not a function。我在这里做错了什么?

【问题讨论】:

    标签: angular typescript angularfire2


    【解决方案1】:

    我设法通过在地图中手动分配它来完成这项工作:

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

    我对这个解决方案不满意,感觉真的很hack-ish,但至少它有效。

    更新:经过进一步测试,如果您注销并重新登录,这会引发错误,因为它丢失了对 uid 的引用。我对解决方法的最佳尝试甚至更丑陋:

    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>
    

    (如果您想使用任何其他方法,您还需要单独添加它们)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      相关资源
      最近更新 更多