Javascript 如何实现可汇总/计数的一次性向上/向下投票?

Javascript 如何实现可汇总/计数的一次性向上/向下投票?,javascript,html,angularjs,firebase,voting-system,Javascript,Html,Angularjs,Firebase,Voting System,User@guru的想法:每个用户都可以改变投票(向上或向下),而不是总点击次数+/- 我面临的问题是这个一次性投票功能一旦投票,其他用户只能更改投票(但不能添加或扣除投票分数,即-1下降,或向下->向上) 我如何实现一次性投票系统+每个用户可以分别添加投票和汇总总投票 大师版本 html <body ng-controller="MainCtrl"> <i title="Up Votes" ng-click="changeVote(vote, 'up')" clas

User@guru的想法:每个用户都可以改变投票(向上或向下),而不是总点击次数+/-

我面临的问题是这个一次性投票功能一旦投票,其他用户只能更改投票(但不能添加或扣除投票分数,即-1下降,或向下->向上) 我如何实现一次性投票系统+每个用户可以分别添加投票和汇总总投票

大师版本
html

<body ng-controller="MainCtrl">
  <i title="Up Votes" ng-click="changeVote(vote, 'up')" class="fa fa-arrow-circle-up fa-2x" ng-class="{true:'up', false:''}[vote=='up']"></i>
  <br>
  <i title="Down Votes" ng-click="changeVote(vote, 'down')" class="fa fa-arrow-circle-down fa-2x"  ng-class="{true:'down', false:''}[vote=='down']"></i>
  <br>Vote: {{vote}}


投票增量功能(我正在尝试更改的旧版本)

此版本添加或删除1票,但用户可以多次单击。除了使用Firebase安全功能外,我还试图让每个用户只能投票一次。(但他们可以随时改变投票)


您需要存储用户对该项目投票的结果,因此item.vote=“down”或item.vote=“up”。然后你可以检查他们是否投了赞成票,以及投票结果如何

我不确定Firebase如何存储他们的信息,但在一个典型的关系数据库中,您将有3个表:items、users和uservots,其中items是一个项目列表,users是您的用户,uservots(或任何名称)是一个组合itemId、userId和votetype(up/down)的表


你的问题很快就被认为“太宽泛了”。可能有助于解决这个问题的是编写一个更真实的MCVE,因为您当前的代码片段显示出很少的工作量。@FrankvanPuffelen附上了代码。起初,我想花更多的时间考虑如何重新排列损坏的代码(这让我很尴尬,至今还没有产生任何具体的东西),但猜得越多越好!谢谢你的回复和建议:)我已经编辑了这个问题,让我知道这个问题是否更集中。谢谢大家的帮助。嗨,约翰,Firebase通常会存储上述信息。我已经包括了代码。
app.controller('MainCtrl', function($scope) {
  $scope.changeVote = function(vote, flag) {
    $scope.vote = vote == flag ? 'None' : flag;
    alert($scope.vote);
  };
});
var app = angular.module('voteApp', []);

app.controller('MainCtrl', function ($scope) {
    $scope.upVote = function () {
        $scope.vote++;
    }
    $scope.downVote = function () {
        $scope.vote--;
    }
    $scope.vote = 0;
});
// Really you'd need a way to do this more securely with your backend code and not on the front end or people can cheat it easily...
$scope.upVote = function () {
    if ($scope.voteType == "down") {
        $scope.vote++;
    }
    $scope.vote++;
    $scope.voteType = "up";
}
$scope.downVote = function () {
    if ($scope.voteType == "up") {
        $scope.vote--;
    }
    $scope.vote--;
    $scope.voteType = "down";
}
$scope.vote = 0;