2016-11-17 3 views
2

Firebaseからオブジェクトを削除する削除機能を作成しようとしています。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.

私はまず、最も重要なところ、私は間違っているつもりです、2つの質問があります。そして第二に、this.sdkdb.child(...を2回行うことは、少し間違っていると感じて、これを単純化することができますか?

答えて

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 !')); 
} 

また、あなたのスニペットでは、あなたが戻って使用していないが第2のパスを刻み、その${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から約束を返す検討する必要があります完了します。

関連する問題