Доступ к вложенным данным с помощью Angularfire

#angularjs #firebase #angularfire

# #angularjs #firebase #angularfire

Вопрос:

Я пытаюсь зафиксировать изменения во вложенном массиве в моих данных Firebase. Данные расположены следующим образом:

  • Вызовы
    • (Уникальный идентификатор Firebase)
      • Станция: «Foobar»
      • Время: «20:30»
        • Ответчики
          • (Уникальный идентификатор Firebase)
            • Имя: «Фрэнк»
            • Аватар: «foo.jpg «
          • (Уникальный идентификатор Firebase)
            • Имя: «Марта»
            • Аватар: «bar.jpg «

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

Вот что у меня есть на данный момент. Отсутствует некоторый код, связанный с путями и получением JWT-

 var ref = new Firebase('https://foobar.firebaseio.com/clients/'   clientAuth);
var callRef = ref.child('calls');
$scope.activeCalls = 0;
$scope.calls = $firebase(callRef);
$scope.calls.$on("change", function() {
            var keys = $scope.calls.$getIndex();
            $scope.activeCalls = keys.length;
            keys.forEach(function(key, i) {
                console.log($scope.calls[key].responders);
              // This provides an object with array of responders
            });
});
 

Обновить

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

 $scope.calls.$on("child_added", function(v) {
            console.log(v.snapshot.value); // This gives me the details I need
        });
 

Комментарии:

1. Я не совсем понимаю вашу цель здесь. Созданный вами объект $firebase автоматически синхронизирует все изменения с ответчиками. Вы просили более красноречивый способ, но мне трудно понять, что более красноречиво, чем «автоматический». Я думаю, что здесь может помочь некоторый контекст; это немного похоже на проблему XY . Кроме того, ознакомьтесь с рекомендациями по использованию массива; как правило , вы хотите избежать их в распределенных данных.

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

3. Кроме того, я думаю, что я ясно дал понять, в чем проблема — сложность получения свойств объекта-ответчика при его добавлении или удалении из этого вызова. И когда я перечисляю (случайный идентификатор), я на самом деле имел в виду уникальный идентификатор, назначаемый Firebase при вводе данных.

4. Я все еще пытаюсь найти решение этой проблемы. Буду признателен за любую помощь. Извлечь вложенные данные не должно быть так сложно.