AngularFire2 Firebase.update не удалось snapshot.exists()

Я создаю приложение 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 ответа

В 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$);
}

Однако в последних выпусках было несколько исправлений ошибок, поэтому обновление рекомендуется.

Вкратце: объект, который вы указали во втором аргументе обновления, может не содержать свойства $key и $ существующие:

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 и должен работать. Я использую машинопись 2.4.1. Возможно, что-то не так с моим tsconfig.json? (Цель компиляции для моего проекта должна быть es5).

Другие вопросы по тегам