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).