Я борюсь с получением объекта во вложенном массиве из 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 на выходе):
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