我正在努力了解如何使用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失败:第一个参数是无效路径:" undefined"。路径必须是非空字符串,并且不能包含"。","#"," $"," [& #34;,或"]"
有关如何解决此问题的任何提示?
答案 0 :(得分:1)
AngularFire documentation表示传递给promise回调的对象是常规Firebase对象,而不是AngularFire引用。这意味着您需要使用.key()
而不是.$id
:
delete: function (project) {
var userid = project.creatorUID;
return projects.$remove(project).then(function(projectRef) {
$firebase(ref.child('user_projects').child(userid))
.$remove(projectRef.ref());
});
},
答案 1 :(得分:0)
这可能不是最干净的解决方案,但我找到了一种方法来实现我需要将user_projects条目id的唯一ID保存到项目本身:
create: function (project) {
return projects.$add(project).then(function(projectRef) {
var projectId = projectRef.name();
$firebase(ref.child('user_projects').child(project.creatorUID))
.$push(projectId).then(function(userProjectRef) {
var userProjectId = userProjectRef.name();
$firebase(ref.child('projects').child(projectId).child('LinkID')).$set(userProjectId);
});
return projectRef;
});
},
所以,在我的火力基地,我得到了:
projects
|
`--- JlagYdBNX1gyMVCoXBF
| `-- Name: "Activity 1"
| `-- CreatorID: "simplelogin:29"
| `-- LinkID: "JleI106xJgZf6_mGHUI"
|
user_projects
|
`--- simplelogin:29
`--JleI106xJgZf6_mGHUI: "JlagYdBNX1gyMVCoXBF"
然后删除条目要容易得多:
delete: function (project) {
var userId = project.creatorUID;
var userProjectId = project.LinkID;
return projects.$remove(project).then(function(projectRef) {
$firebase(ref.child('user_projects').child(userId)).$remove(userProjectId);
});
},