JavaScript получить объект во вложенном дочернем массиве

0

Я борюсь с получением объекта во вложенном массиве из firebase с использованием углового огня.

Структура выглядит так:

users {
  <user1-key>{
    events{
      <event-key>{
        title: "event 1",
        tasks: {
          <task-key>{
            title: "task 1",
            isChecked: false
          },
          <task-key>{
            title: "task 2",
            isChecked: false
          }
        }
      }
    }
  },


  <user 2-key>{
    events{
      <event-key>{
        title: "event 1",
        tasks: {
          <task-key>{
            title: "task 1",
            isChecked: false
          },
          <task-key>{
            title: "task 2",
            isChecked: false
          }
        }
      }
    }
  }

}

У меня есть служба, которая извлекает элементы из firebase на основе пользователей:

app.factory("Events", function ($firebaseObject, $firebaseArray, baseUrl) {
    ref = new Firebase(baseUrl);
    refAuth = ref.getAuth();
    events = $firebaseArray(ref.child("users/" + refAuth.uid + "/events"));

    return {
        all: function() {
          return events;
        },   

        get: function (eventId) {
            for (var i = 0; i < events.length; i++) {
                if (events[i].$id === eventId) {
                    return events[i];
                }
            }
        },

        getTasks: function(eventId){
           for (var i = 0; i < events.length; i++) {
                if (events[i].$id === eventId) {
                   return events[i].tasks;
                }
            }
        },

        getInnerTask: function(eventId, taskId){
       for (var i = 0; i < events.length; i++) {
            if (events[i].$id === eventId) {
               event = events[i];
               for(var j = 0; j < event.tasks.length; j++){
                    if(event.tasks[j].$id === taskId){
                        return event.tasks[j];
                    }
               }
            }
        }
    }


    };
});

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

вот мой контроллер для единственного события:

app.controller("EventsInnerCtrl", function ($scope, $firebaseArray,$firebaseObject, $stateParams, Events) {

    $scope.event = Events.get($stateParams.eventId);

    $scope.tasks = Events.getTasks($stateParams.eventId);
    console.log($scope.tasks);

    $scope.clickTask = function(){
        $scope.task = Events.getInnerTask($stateParams.taskId);
        console.log($scope.task); // this returns "Undefined"
    }


});

Стоит отметить, что вывод моих событий выглядит следующим образом:

Выход консоли консоли

и мои задачи выглядят иначе (не хватает поля $ id на выходе):

Консольный вывод задач

Теги:
firebase
firebase-realtime-database

1 ответ

0
getInnerTask: function(eventId, taskId) {
    for (var i = 0; i < events.length; i++) {
        if (events[i].$id === eventId) {
            event = events[i];
            for (var j = 0; j < event.tasks.length; j++) {
                if (event.tasks[j].$id === taskId) {
                    return event.tasks[j];
                }
            }
        }
    }
}

Мое предположение - это event не в текущей области, возможно, вы не можете получить к нему доступ... как насчет использования ключевого слова var с event

  • 0
    Я перепробовал все варианты, которые только мог придумать, но все равно не повезло

Ещё вопросы

Сообщество Overcoder
Наверх
Меню