2016-05-16 8 views
2

今すぐユーザーは一般的に1回のみ投票をすることができます。私は、ユーザーが1ポストに1回投票したり、投票したりできるようにしたい。角度アプリで投稿ごとに1回だけ投票する

<div ng-repeat="post in posts | orderBy:'-upvotes'"> 

    <span class="glyphicon glyphicon-thumbs-up" 
     ng-click="incrementUpvotes(post)" ng-style="post.hadUpvoted ? {color: 'red'} : {}"></span> 
    {{post.upvotes}} 

    <span class="glyphicon glyphicon-thumbs-down" ng-click="downvote(post)" 
     ng-style="post.hadDownvoted ? {color:'red'} : {}"></span> 

コントローラー:

var upvoted; 
$scope.incrementUpvotes = function(post) { 
    if(!upvoted) { 
     posts.upvote(post); 
     upvoted = true; 
     post.hadUpvoted = true; 
    } 
}; 

サービス:代わりにグローバルupvoted変数をチェックする

o.upvoteComment = function(post, comment) { 
    return $http.put('/posts/' + post._id + '/comments/' + comment._id + '/upvote', null, { 
     headers: {Authorization: 'Bearer '+auth.getToken()} 
     }).success(function(data) { 
      comment.upvotes += 1; 
     }); 
}; 

答えて

3

、各記事に対してそれを確認してください。

お使いのコントローラが

$scope.incrementUpvotes = function(post) { 
    if(!post.hadUpvoted) { 
     posts.upvote(post); 
     post.hadUpvoted = true; 
    } 
}; 

アイデアは、各ポストのためにローカルupvoted変数を持つことで、このようなものでなければなりません。

希望します。もし疑問があればコメントで聞いてください。

0

はコントローラ全体にスコープが設定されています。そのため、ユーザが一度投票した場合、if(!upvoted)にチェックを入れるとそのブロックは実行されません。代わりにif(!post.hadUpvoted)をチェックして、各投稿にスコープを設定します。

関連する問題