Vue-Firebase: обновление дочерних элементов и запись в дочерние элементы

Я начал работать с Firebase и Vue, а также с VueFire, и я не понимаю, как обновлять дочерние узлы в Firebase.

Я открыл проект firebase и подключился к нему, и я могу отправлять в него данные.

Firebase

Я сделал компонент vue

 import db from '../FireBase'

  let team = db.ref('Teams');//Reference to Teams at firebase 
  let miss = db.ref().child('Teams'); //Attempt to get to the children of Teams 
  export default {
    name: "App",
    firebase: {
      Teams_loc: db.ref('Teams'),
      Mission: this.Teams_loc.child('Teams'),
    missionKey:  db.ref().child('Teams').push("").key,
    },
...

Мне удается получить команды из firebase и отправить им данные:

this.$firebaseRefs.Teams_loc.push({
    "test": "tester"
});

Что работает, но когда я пытаюсь обновить детей внутри

this.miss.push({
              "where": "am i"
            })

Я получаю следующую ошибку

Cannot read property 'child' of undefined

И когда я пытаюсь обновить ребенка

this.$firebaseRefs.missionKey.update(arr[0]);//arr[0] is an object

Я попытался осмотреть довольно много мест, но, похоже, ничего не помогло.

Спасибо,

Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
0
0
632
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы делаете следующее, вы делаете ошибку во второй строке.

  Teams_loc: db.ref('Teams'),
  Mission: this.Teams_loc.child('Teams'),

У узла Teams нет дочернего элемента, у которого есть ключ со значением `Teams.

Поэтому, если вы хотите обновить элемент, вам сначала нужно получить его ключ (например, -LEzOBT-mp.....) и сделать следующее, как описано в документе:

updateItem: function (item) { 
   // create a copy of the item
   const copy = {...item}
   // remove the .key attribute
   delete copy['.key']
   //possibly update (or add) some values of (to) the item
   this.$firebaseRefs.Teams_loc.child(item['.key']).set(copy)
}

Также (если я не ошибаюсь) выполнение db.ref() вызовет ошибку, потому что вам нужно передать значение в ref().

Предлагаю вам еще немного изучить документ и пример: https://github.com/vuejs/vuefire и https://github.com/vuejs/vuefire/blob/master/examples/todo-app/index.html


Обновите после вашего комментария. Подробная информация о том, как «узнать случайно сгенерированный ключ»

Согласно документации:

Each record in the bound array will contain a .key property which specifies the key where the record is stored. So if you have data at /Teams/-LEzOBT-mp...../, the record for that data will have a .key of "-LEzOBT-mp.....".

Взгляните на эту часть документа: https://github.com/vuejs/vuefire#array-bindings.

Таким образом, вы получите все ключи объекта Teams. Теперь вам нужно выбрать элемент, который вы хотите обновить.

Вы также можете объявить запрос в своем объекте firebase, например:

  firebase: { 
    team21483: this.database
            .ref('Teams')
            .orderByChild('teamCode')
            .equalTo('21483') 
  }

и вы получите массив только с одной командой, с TeamCode = 21483.

Лучший подход в этом последнем случае - вручную привязать этот запрос Firebase с помощью методов экземпляра $bindAsArray (или, возможно, $bindAsObject), используя переменную, которую вы передаете в equalTo ().

Я знаю, что если бы я мог получить ключ, это упростило бы задачу, но проблема в том, что я хочу создавать записи и удалять их, поэтому я не уверен, как я могу узнать случайно сгенерированный ключ, который я получаю в firebase.

firevue 14.06.2018 22:29

Хорошо, я вижу. Думаю, мне еще многому нужно научиться. Я начну работать с указаниями, которые вы мне дали. Большое спасибо!

firevue 14.06.2018 22:52

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