【发布时间】:2015-04-04 16:32:02
【问题描述】:
我有点难以理解如何使用 AngularJS 从 Firebase 中的对象中删除单个项目。
这是我的 Firebase(只是有趣的一点):
projects
|
`--- $id
| `-- Name
| `-- CreatorID
|
user_project
|
`--- CreatorID
`-- projectid
每次用户创建一个条目时,都会将相同的条目添加到创建者 ID 等于我从 Firebase 简单登录获得的用户 ID 的条目中。同时,我的代码在 user_entries/CreatorID 中创建了一个新项目(这样我就有了一个与每个用户关联的条目列表)。
例子:
projects
|
`--- JlagYdBNX1gyMVCoXBF
| `-- Name: "Activity 1"
| `-- CreatorID: "simplelogin:29"
|
user_projects
|
`--- simplelogin:29
`--JleI106xJgZf6_mGHUI: "JlagYdBNX1gyMVCoXBF"
现在我的问题是我可以删除一个条目,但我不知道如何追溯并从 user_entries 中删除它(所以我在那里遇到了很多孤儿)。
我正在使用工厂:
app.factory('Project', function ($firebase, FIREBASE_URL) {
var ref = new Firebase(FIREBASE_URL);
var projects = $firebase(ref.child('projects')).$asArray();
var Project = {
all: projects,
create: function (project) {
return projects.$add(project).then(function(projectRef) {
$firebase(ref.child('user_projects').child(project.creatorUID))
.$push(projectRef.name());
return projectRef;
});
},
delete: function (project) {
var userid = project.creatorUID;
return projects.$remove(project).then(function(projectRef) {
//$firebase(ref.child('user_projects').child(userid))
console.log(project.$id);
});
},
};
return Project;
});
我知道 $remove 有一个回调返回已处理项目的 $id,所以我尝试将 delete 更改为:
delete: function (project) {
var userid = project.creatorUID;
return projects.$remove(project).then(function(projectRef) {
$firebase(ref.child('user_projects').child(userid))
.$remove(projectRef.$id);
});
},
但我明白了
错误:Firebase.child 失败:第一个参数是无效路径:“未定义”。路径必须是非空字符串,并且不能包含“.”、“#”、“$”、“[”或“]”
关于如何解决这个问题的任何提示?
【问题讨论】:
-
我假设您已经尝试过
.$remove(project.$id)?显然from the docs 传递给回调的对象是一个常规的 Firebase 对象,不是一个 Angular firebase 对象。我不知道他们为什么决定这样做。 -
当然,按照文档,您应该能够使用
.$remove(projectRef.key())。 -
是的,我尝试使用
project.$id,但没有运气。但我想这是因为project.$id是值,而不是 user_projects 中的键。