我正在尝试创建一个删除功能,该功能将从Firebase中删除我的对象。
我在FireBase上有以下结构:
recipes recipebooks recipesPerRecipebook
- id - id - recipebook_id
- id - id - recipe_id: true
我想要做的是当我点击删除时,我想从recipe_id
删除recipes
,并将其从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(...
两次感觉有点不对,而且我可以简化这个很麻烦吗?
答案 0 :(得分:8)
看起来很奇怪。
所以你应该能够删除这样的对象:
var distinctValues = dt.AsEnumerable().Select(a => a.Field<string>("SERIAL NUMBER")).Distinct().ToList();
var duplicateValues = dt.AsEnumerable().GroupBy(a => a.Field<string>("SERIAL NUMBER")).SelectMany(a => a.Skip(1)).Distinct().ToList();
var duplicatesRemoved = dt.AsEnumerable().Except(duplicateValues);
其中af.database.object('/--your-list-name--/--your-obejct-key--').remove();
是注入的AngularFire2服务。
答案 1 :(得分:0)
问题在于不应该如何调用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
返回承诺,以便可以通知来电者完成删除。