Проблемы с вызовом поля спецификаций c в Firebase на основе параметра в URL - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь вызвать соответствующие данные из Firebase на основе параметра в URL.

Например:

var userId = 'EqBOy1RVZacBCaNlzbG9NDHrXl23'

//sets the variable to the exercise name in the url
var exerciseName = this.$route.params.exercise_name //'dumbbell_extension'for example

db.collection('track').doc(userId).get().then((doc) => {
  if (doc.exists) {
      this.exerciseData = doc.data().exerciseName //Returns 'undefined'
  }
})

Вот изображение базы данных: Изображение документа Firebase

Возвращает undefined несмотря на данные, существующие в Firebase и все остальное работает как задумано. Я предполагаю, что это потому, что он на самом деле ищет поле с именемучиражение вместо переменной exerciseName.

enter image description here

Ответы [ 2 ]

3 голосов
/ 30 марта 2020

data() метод DocumentSnapshot «извлекает все поля в документе как объект».

Поэтому вы должны использовать квадратную скобку , которая позволяет вам получить доступ к свойствам объекта по имени, как указано ниже:

var userId = 'EqBOy1RVZacBCaNlzbG9NDHrXl23'

//sets the variable to the exercise name in the url
var exerciseName = this.$route.params.exercise_name //'dumbbell_extension'for example

db.collection('track').doc(userId).get().then((doc) => {
  if (doc.exists) {
      this.exerciseData = doc.data()[exerciseName] 
  }
})

Вас также может заинтересовать этот ответ { ссылка }, который дает более подробную информацию о записи в квадратных скобках.

0 голосов
/ 30 марта 2020

Ваш код ищет в документе поле с именем "PracticeName", но в документе нет такого поля. Единственное поле в вашем документе, как показано на скриншоте, называется «dumbbell_extension», и мы не можем видеть, что оно содержит (это может быть список или карта).

Поскольку мы не знаем что ожидает ваш код, больше сказать нечего. Ваш код должен использовать имена полей, присутствующих в документе, или проверить, существуют ли они на самом деле, прежде чем их использовать.

...