2016-11-07 93 views
0

我已經嘗試了不同類型的解決方案,通過Firebase數據庫中的鍵刪除子元素,但沒有任何影響。我做錯了什麼?Firebase:刪除子元素不起作用

我的數據庫結構如下所示,其中players是數據庫的根目錄下 enter image description here

我有一個角2單頁應用,其中在的index.html包括火力客戶端初始化:

<script src="https://www.gstatic.com/firebasejs/3.5.3/firebase.js"></script> 
<script> 
    // Initialize Firebase 
    var config = {/*....*/}; 
    firebase.initializeApp(config); 
</script> 

無論Firebase documentation都缺失不工作:

removePlayer1(id: any): Promise<Response> { 
    return firebase.database().ref("players").child(id).once('value') 
      .then((snap: any) => { 
       console.log("Player was removed", id, snap); 
       snap.remove(); 
      }).catch((err: any) => this.handleError(err)); 
} 

removePlayer2(id: any): Promise<Response> { 
    return firebase.database().ref().child('players') 
      .child(id).remove().then((r: any) => { 
       console.log("Player was removed", id); 
      }).catch((err: any) => this.handleError(err)); 
} 

This solution仍然不能正常工作:

removePlayer(id: any): Promise<Response> { 
    var updates = {}; 
    updates[id] = null; 
    return firebase.database().ref("players").update(updates) 
      .then((r: any) => { 
       console.log("Player was removed", id, r); 
      }).catch((err: any) => this.handleError(err)); 
} 

同時更新和插入子值完美的作品:

savePlayer(player: IPlayer): Promise<Response> { 
    let playerRef: any; 
    if (!player._id) { 
     playerRef = firebase.database().ref().child('players').push().set(player); 
    } else { 
     var updates = {}; 
     updates[player._id] = player; 
     playerRef = firebase.database().ref().child('players').update(updates); 
    } 

    return playerRef.catch((err: any) => this.handleError(err)); 
} 

謝謝!

回答

0

我不知道爲什麼the mentioned link從StakOverflow沒有幫助我,但我是接近,因此我的解決辦法是這樣的:

removePlayer(id: any): Promise<any> { 
    var ref = firebase.database().ref().child('players'); 
    return new Promise<any>((resolve, reject) => { 
     ref.child(id).once("value", function (snapshot: any) { 
      var updates = {}; 
      updates[snapshot.key] = null; 
      ref.update(updates).then((r: any) => { 
       resolve(r); 
      }).catch((e: any) => reject(e)); 
     }).catch((e: any) => reject(e)); 
    }); 
}