【问题标题】:How do I post my array in my firebase database?如何在我的 firebase 数据库中发布我的数组?
【发布时间】:2017-10-15 05:41:39
【问题描述】:

我正在开发一个基于本地联赛的梦幻足球网络应用。到目前为止,当使用 firebase auth 创建用户时,在我的 firebase 中使用用户 uid 创建了一个相应的节点,如下所示:

users:{
     user UID: {
                email:
                teamname:
                fullname:
                week:
              }
   }

我有一个名为 $scope.history 的空数组和每个选定玩家的购买函数:

$scope.history = [];


$scope.buy = function(player) {

  $scope.total = 50000000;     

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

    //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);
    }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);
  };   

我的问题

我的问题是当用户选择 6 位玩家数组(每个玩家都是一个 JSON 对象)时,如何将该数组发布到相应用户的用户 UID 父节点下的“周”子节点?

我尝试过这样做,但没有成功:

    $scope.saveTeam = function(){
    var ref2 = firebase.database().ref("users/" + auth.uid + "/week"); 
     ref2.set($scope.history);
     };

有没有办法将每个用户的 6 名玩家选择发布到“周”节点,以便每周可以更改/更新选择?

【问题讨论】:

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


    【解决方案1】:

    试试更新功能。如果您使用 push 或 set ,它将在一周内创建新节点,并将保留您的数组,但如果您使用 update ,它将直接存储。

    const ref = firebase.database().ref('users').child(userUID).child('week');
    ref.update($scope.history);
    

    它将像这样存储数据:

    【讨论】:

    • 谢谢。这样做的问题是,当用户为下一周做出选择时,更新功能将覆盖前一周的选择。但我希望能够看到之前的选择是什么。我认为无法使用 set 函数发布数组。使用 set 似乎不起作用。
    • 是的,您可以使用 set 函数发布一个数组。它将创建或更新节点。我不明白你想做什么。如果您想跟踪前几周的情况,您可能需要重新设计您的架构。现在你正在覆盖一周的内容,所以如果你想添加新的一周但保留前一周,你应该在一周内有多个节点。
    • 我试过你的方法,不成功。我尝试发布随机单词并且它有效。我还尝试使用 $scope.history [0] 从数组中发布特定的玩家,但它也不起作用。
    猜你喜欢
    • 2020-11-05
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多