2017-08-16 2 views
0

J'essaie d'ajouter un objet à /users/[userKey]/invitedTo mais set supprime les données existantes, tout comme update.AngularFire2 - Ajouter à la liste enfant

Ce que je veux retrouver avec quelque chose comme ceci:

users 
    -uniqueuserkey 
     --name: Name 
     --InvitedTo 
      ---eventuniquekey1 
       ----eventname: event name 1 
       ----etc 
      ---eventuniquekey2 
       ----eventname: event name 2 
       ----etc 

-

// this.event.push(eventObj); 
this.event.push(eventObj).then((item) => { 
    if (item) { 
    const itemKey = item.key; 
    for (const key in guests) { 
     if (guests.hasOwnProperty(key)) { 

     const invitedObj = {}; 
     const invitedTo = this.db.object(`/users/${key}/invitedTo`); 
     invitedObj[itemKey] = eventObj; 
     invitedTo.set({ invitedObj }); 

     } 
    } 
    } 
}); 

Update fait exactement ce que je dois, mais il supprime également la valeur existante:

for (const key in guests) { 
     if (guests.hasOwnProperty(key)) { 
     const invitedObj = {}; 
     invitedObj[itemKey] = eventObj; 
     this.users.update(key, { invitedTo: invitedObj }); 
     } 
    } 

Devrais-je simplement obtenir les données existantes et y ajouter?

Répondre

0

Si vous souhaitez ajouter un objet, vous (habituellement) doit utiliser la méthode push au lieu de set ou update:

const invitedTo = this.db.list(`/users/${key}/invitedTo`); 
invitedTo.push(eventObj); 

De cette façon, Firebase va créer une clé unique et l'ajouter au noeud invitedTo .

Si vous voulez définir la clé vous-même, vous pouvez utiliser la méthode update comme ceci:

const invitedTo = this.db.object(`/users/${key}/invitedTo/${itemKey}`); 
invitedTo.update(eventObj);