2016-11-17 28 views
2

我想创建一个删除功能,它将从Firebase中删除我的对象。使用AngularFire从Firebase中删除对象2

我有火力的结构如下:

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(...两次感觉有点错误和麻烦,我可以简化这?

回答

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的承诺,使主叫方可以删除的通知完成。