使用 AngularFire 2 从 Firebase 中删除对象
Remove object from Firebase using AngularFire 2
我正在尝试创建一个删除函数,它将从 Firebase 中删除我的对象。
我在 FireBase 上有以下结构:
recipes recipebooks recipesPerRecipebook
- id - id - recipebook_id
- id - id - recipe_id: true
我想做的是当我点击删除时,我想从 recipes
中删除 recipe_id
并将其从 recipesPerRecipebook/${recipebook_id}
中删除
我在 recipes.service.ts
中创建了一个函数
deleteRecipe(recipe_id:string, recipebook_id:string) {
this.sdkDb.child('recipes').remove(recipe_id)
.then(
() => alert('recipe deletion requested !')
);
this.sdkDb.child('recipesPerRecipebook/${recipebook_id}').remove(recipe_id)
.then(
() => alert('recipe Association deletion requested !')
);
}
然后我在 recipeDetails.component.ts
delete() {
this.recipesService.deleteRecipe(this.recipe.$key, this.recipe.recipebook_id);
}
我收到以下错误:
error_handler.js:54 Error: Firebase.remove failed: first argument must be a valid function.
我有两个问题,首先也是最重要的是我哪里出错了。其次做两次this.sdkdb.child(...
感觉有点不对劲,麻烦能不能简化一下?
看起来很奇怪。
所以你应该能够像这样删除一个对象:
af.database.object('/--your-list-name--/--your-obejct-key--').remove();
其中 af
是注入的 AngularFire2 服务。
问题是 remove
不应该这样称呼。
如果您查看 documentation,您会看到 remove
进行可选回调。
所以你必须这样称呼它:
deleteRecipe(recipe_id:string, recipebook_id:string) {
this.sdkDb.child(`recipes/${recipe_id}`)
.remove()
.then(() => alert('recipe deletion requested !'));
this.sdkDb.child(`recipesPerRecipebook/${recipebook_id}/${recipe_id}`)
.remove()
.then(() => alert('recipe Association deletion requested !'));
}
此外,在您的代码段中,您没有对第二条路径使用反引号,因此 ${recipebook_id}
不会被评估和替换。
如果想一次删除两条路径,可以使用update
:
deleteRecipe(recipe_id:string, recipebook_id:string) {
this.sdkDb.update({
`recipes/${recipe_id}`: null,
`recipesPerRecipebook/${recipebook_id}/${recipe_id}`: null
})
.then(() => alert('deleted!'));
}
您可能还想考虑从 deleteRecipe
返回承诺,以便通知调用者删除完成。
我正在尝试创建一个删除函数,它将从 Firebase 中删除我的对象。
我在 FireBase 上有以下结构:
recipes recipebooks recipesPerRecipebook
- id - id - recipebook_id
- id - id - recipe_id: true
我想做的是当我点击删除时,我想从 recipes
中删除 recipe_id
并将其从 recipesPerRecipebook/${recipebook_id}
我在 recipes.service.ts
中创建了一个函数deleteRecipe(recipe_id:string, recipebook_id:string) {
this.sdkDb.child('recipes').remove(recipe_id)
.then(
() => alert('recipe deletion requested !')
);
this.sdkDb.child('recipesPerRecipebook/${recipebook_id}').remove(recipe_id)
.then(
() => alert('recipe Association deletion requested !')
);
}
然后我在 recipeDetails.component.ts
delete() {
this.recipesService.deleteRecipe(this.recipe.$key, this.recipe.recipebook_id);
}
我收到以下错误:
error_handler.js:54 Error: Firebase.remove failed: first argument must be a valid function.
我有两个问题,首先也是最重要的是我哪里出错了。其次做两次this.sdkdb.child(...
感觉有点不对劲,麻烦能不能简化一下?
看起来很奇怪。
所以你应该能够像这样删除一个对象:
af.database.object('/--your-list-name--/--your-obejct-key--').remove();
其中 af
是注入的 AngularFire2 服务。
问题是 remove
不应该这样称呼。
如果您查看 documentation,您会看到 remove
进行可选回调。
所以你必须这样称呼它:
deleteRecipe(recipe_id:string, recipebook_id:string) {
this.sdkDb.child(`recipes/${recipe_id}`)
.remove()
.then(() => alert('recipe deletion requested !'));
this.sdkDb.child(`recipesPerRecipebook/${recipebook_id}/${recipe_id}`)
.remove()
.then(() => alert('recipe Association deletion requested !'));
}
此外,在您的代码段中,您没有对第二条路径使用反引号,因此 ${recipebook_id}
不会被评估和替换。
如果想一次删除两条路径,可以使用update
:
deleteRecipe(recipe_id:string, recipebook_id:string) {
this.sdkDb.update({
`recipes/${recipe_id}`: null,
`recipesPerRecipebook/${recipebook_id}/${recipe_id}`: null
})
.then(() => alert('deleted!'));
}
您可能还想考虑从 deleteRecipe
返回承诺,以便通知调用者删除完成。