【问题标题】:How to access node in the firebase databse如何访问firebase数据库中的节点
【发布时间】:2017-12-29 10:11:40
【问题描述】:

我的目标是让每个用户总共选择 6 名玩家。当每个玩家被选中时,玩家 ID 被发送到数据库中名为“total”的节点,使用 push() 方法。代码写在下面

 var ref = firebase.database().ref().child('players');

var ref3 =  firebase.database().ref().child('users').child(uid).child('total');

$scope.players = $firebaseArray(ref);

console.log ($scope.players); 


 $scope.history = [];

 $scope.buy = function(player) {
    //remove if already added locally
    var index = $scope.history.indexOf(player);
    if(index>=0){
        $scope.history.splice(index,1);
        return;
    }

    //remove if already added on firebase 


    //max 6 allowed
    if($scope.history.length>=6){
        alert('max 6 allowed');
        return;
    }

    var selected = $scope.history.reduce(function(a,b){
        a[b.position] = (a[b.position] || 0) + 1;
        return a;
    }, {}) || {};

    if(!selected[player.position] || selected[player.position]<2){
        $scope.history.push(player);
        ref3.push(player.id);
    }else{
        alert('You can add only two players per position');
    }
     };

     $scope.getTotal = function(){
    return $scope.history.reduce(function(tot, p){
        tot = tot - p.price;
        return tot;
    }, $scope.total);
     };    

这就是数据库的结构:

   {
    "players" : [ {
      "R" : 0,
    "Team" : "Industry",
   "Y" : 0,
     "assists" : 0,
     "goals" : 0,
  "id" : 1,
   "name" : "Yasin 'YB' Amusan",
   "position" : "forward",
   "price" : 8000000
     }, {
    "R" : 0,
    "Team" : "Industry",
     "Y" : 0,
   "assists" : 0,
    "goals" : 0,
   "id" : 2,
    "name" : "Hassan 'Hasi' Akinyera",
    "position" : "defender",
     "price" : 5000000
     }],

   "users" : {
 "l3J1TVsFNLMi0Oxg6hz4AJpacE53" : {
  "email" : "awoniyideji@yahoo.com",
  "fullname" : "Djflex11",
  "teamname" : "deji awoniyi",
  "total" : {
    "-Kpl19z_25IEhiCEFrui" : 1,
    "-Kpl1ARqT-v_btJ7OAq2" : 2,
    "-Kpl1AsdodYWVPWWd5xA" : 2,
    "-Kpl1iN7a7PLU-tnkKc4" : 1,
    "-Kpl1j5CtN6c_mnmWLP-" : 1,
    "-Kpl1k0BNCP5NNFV5uX6" : 1
    },
    "userName" : "awoniyideji@yahoo.com",
    "week" : "no", 
     }
     }
     }

我的问题

目标是不能被同一用户选择两次。 MY 代码目前阻止玩家在本地被选中两次,但可以将相同的玩家 id 推送到 firebase 数据库。我的问题是如何基本上检查总节点,以便选定的玩家如果已经“推送”到数据库中,将被删除而不是插入到数据库中。我知道使用 firebase 可以避免使用“indexOf”。

【问题讨论】:

  • 我建议你多注意缩进。更简洁的代码更易于阅读和维护。

标签: javascript angularjs firebase web-applications firebase-realtime-database


【解决方案1】:

这应该可行:

if(ref3.toJSON().hasOwnProperty(playerId)){
  ref3.child(playerId).remove();
}

参考资料:

Check for key in JSON

Remove from DB

【讨论】:

猜你喜欢
  • 2019-10-11
  • 2020-12-06
  • 1970-01-01
  • 1970-01-01
  • 2023-01-16
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多