【发布时间】:2016-07-23 22:42:41
【问题描述】:
我正在努力使用 angularfire 从 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 中,我使用嵌套的 for 循环,希望能够以与获取事件 id 类似的方式获取 id,但它不起作用。
这是我的单一事件控制器:
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 字段):
【问题讨论】:
标签: javascript angularjs json firebase firebase-realtime-database