我有一个ng-click功能,作为“向上投票按钮”,它将投票数增加1,每个用户只能投票一次,我用来检测“一个用户只能投票一次”的方式是如果他们的user_id在voted_id中,则将他们的user_id与voted_id进行比较然后他们将无法投票,但问题是我无法将从数据库获取的更新的voted_id列表设置为变量。换句话说,用户可以投票多次,除非用户刷新页面并且最新的voted_id更新为变量。
我不确定我这样做的方式是否正确如果你们有更好的建议请告诉我,你的建议非常感谢。 这就是我到目前为止所拥有的
$scope.up = function(){
if(s_session != null){ // check if user logged in or not
data.getUserData().success(function(userData){ // get user data
$scope.a = {};
$scope.b = {};
$scope.a = data1.votes.voted_id; // set voted_id(it is an array)
$scope.b = userData._id; // set user_id
if($scope.a.indexOf($scope.b) == -1){ // if it is not in the list
// perform upvote action
$scope.user ={};
$scope.user = userData;
$scope.user.permalink = $routeParams.permalink;
$http.post('/contentHandler/Post/vote/up',$scope.user).
success(function(updatedData) {
$scope.a = updatedData.votes.voted_id; // after upvoted
// re-set the latest voted_id to
// $scope.a and prevent the user
// to vote again
}).error(function(err){
});
}else{
alert("you can't vote twice");
}
});
}else{
$location.path('/login');
}
}
答案 0 :(得分:1)
你实际上在哪里增加投票数?您可以在客户端设置一个临时的userHasNotVoted
布尔变量(基本上在角度范围内),以防止它们在页面重新加载之前投出多个投票。
将变量添加到范围,如下所示:
$scope.userHasNotVoted = true;
$scope.up = function(){
if(userHasNotVoted){
$scope.userHasNotVoted = false;
//add vote and record it in the db
// do whatever else
}
}