AngularFire2 Firebase.update failed.exists()失败

时间:2017-03-08 11:10:30

标签: angular firebase angularfire2

我一直在创建一个Angular2应用程序,我想在Firebase中更新用户的个人资料,我使用的是AngularFire2。 例如,当我尝试更新具有密钥" nmH5ZmawpQgogoCRVFVfNaBN6xg1"的用户个人资料时,当我点击按钮进行更新时,会出现错误 EXCEPTION: Error in ./ProfilComponent class ProfilComponent - inline template:82:10 caused by: Firebase.update failed: First argument contains a function in property 'users.nmH5ZmawpQgogoCRVFVfNaBN6xg1.$exists' with contents: function () { return snapshot.exists(); }

user.service.ts

  users:FirebaseListObservable<any>;

  updateUser(user:IUser){
   this.users=this.af.database.list('/users');
   this.users.update(user.uid,user);
  }

user.ts

export interface IUser { 
avatarUrl:string;
 createdDate:string; 
birthDate:string;
 displayName:string; 
email:string; 
gendre:string; 
interests:Interest[];
 job:Job[]; 
location:ILocation; 
plateform:string; 
uid:string;
}

提前致谢。

2 个答案:

答案 0 :(得分:1)

在AngularFire2中,列表项和对象具有$key属性并添加了$exists函数。请参阅unwrapMapFn实用程序功能。

从版本2.0.0-beta.8开始,$key$exists属性应该是不可枚举的,update实现应该忽略这些属性。

如果您不想将AngularFire2依赖项更新为最新版本,可以使用以下方法:

updateUser(user: IUser) {
  const { $exists, $key, ...userWithout$ } = user as any;
  this.users = this.af.database.list('/users');
  this.users.update(user.uid, userWithout$);
}

但是,最近发布的版本中有一些错误修复,因此鼓励进行更新。

答案 1 :(得分:0)

简而言之:您在更新的第二个参数中放入的对象可能不包含属性$ key和$ exists:

const key = user.uid;
let userWithout$ = user;
delete userWithout$.$key;
delete userWithout$.$exists;

this.users.update(key, userWithout$);

顺便说一句:额外的问题:

解构线@cartant使用:

const { $exists, $key, ...userWithout$ } = user as any;

非常好但在我的情况下没有工作并导致以下错误:预期的属性解构模式。

这是ES6语法,应该可以正常工作。 我使用的是typescript 2.4.1。 我的tsconfig.json可能有问题吗? (我的项目的ts编译目标必须是es5)。