[英]javascript get object in nested child array
I am struggling with getting an object in a nested array from firebase using angularfire. 我正在努力使用angularfire从firebase获取嵌套数组中的对象。
The structure looks like this: 结构如下:
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
}
}
}
}
}
}
I have a service that fetches items from firebase based on users: 我有一项服务,可根据用户从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];
}
}
}
}
}
};
});
now in my service I am able to get events as well as a single event. 现在,在我的服务中,我既可以获取事件,也可以获取单个事件。 but I cannot seem to be able to get a single task. 但我似乎无法完成一项任务。 only list the tasks. 只列出任务。 in getInnerTask I am using nested for loops in the hope that I can get the id in a similar way to getting the event ids but it is not working. 在getInnerTask中,我使用嵌套的for循环,希望我可以以与获取事件ID相似的方式获取ID,但它不起作用。
here is my controller for the single event: 这是单个事件的我的控制器:
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"
}
});
Its worth noting that my events output looks like this: 值得注意的是,我的事件输出如下所示:
and my tasks out put looks different (Lacks the $id field in output): 和我的任务看起来不同(在输出中缺少$ 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];
}
}
}
}
}
My guess is event
is not in the current scope, may be you are not able to access it... how about using var
keyword with event
我的猜测是event
不在当前范围内,可能是您无法访问它...将var
关键字与event
一起使用怎么样
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.