更新类的数据但省略一个字段(Angular,Firestore,AngularFire2)

时间:2018-05-07 16:29:46

标签: angular typescript angularfire2

我想在每次用户登录时更新Firestore中的一些字段。我有以下方法。

  private updateUserData(user: firebase.User) {
    const userRef: AngularFirestoreDocument<AppUser> = this.afs.doc(
      `users/${user.uid}`
    );

    const data: AppUser = {
      uid: user.uid,
      email: user.email,
      name: user.displayName
    };
    return userRef.set(data, { merge: true });
  }

我有一个像这样的用户模型类:

    export class AppUser {
    uid: string;
    email: string;
    name?: string;
    isAdmin: boolean;
  }

我想更新除了isAdmin字段之外的所有内容,所以我创建了一个变量:

const data: AppUser = {
  uid: user.uid,
  email: user.email,
  name: user.displayName
};

代码工作正常,但我得到一个编译器错误,它正在寻找isAdmin字段。有没有办法省略更改isAdmin字段?

Angular

1 个答案:

答案 0 :(得分:0)

我认为您需要在AppUser类中将isAdmin字段设为可选字段。这可能是你得到错误的原因。另外,如果您只想定义JS Object的类型,我可能会考虑使用interface而不是类。

然后,为了简单地省略该字段,我建议使用Lodash。

  import * as _ from 'lodash';


  private updateUserData(user: firebase.User) {
    const userRef: AngularFirestoreDocument<AppUser> = this.afs.doc(
      `users/${user.uid}`
    );

    return userRef.set(_.omit(data, 'isAdmin'), { merge: true });
  }

在此处查看更多内容:https://lodash.com/docs/4.17.10#omit