使用 AngularJS 在 Firebase 中删除单个项目
Delete single item in Firebase with AngularJS
我有点难以理解如何使用 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"。路径必须是非空字符串,不能包含“.”、“#”、“$”、“[”或“]”
关于如何解决这个问题的任何提示?
AngularFire documentation indicates that the object passed to the promise callback is a regular 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());
});
},
它可能不是最干净的解决方案,但我找到了一种方法来实现我需要的,将 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;
});
},
因此在我的 firebase 中我得到:
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);
});
},
我有点难以理解如何使用 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"。路径必须是非空字符串,不能包含“.”、“#”、“$”、“[”或“]”
关于如何解决这个问题的任何提示?
AngularFire documentation indicates that the object passed to the promise callback is a regular 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());
});
},
它可能不是最干净的解决方案,但我找到了一种方法来实现我需要的,将 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;
});
},
因此在我的 firebase 中我得到:
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);
});
},