在Angular应用程序中每个帖子投票一次
Vote once per post in Angular app
现在,用户通常只能投一次赞成票或反对票。我希望用户能够在每个帖子中投票一次。
<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;
}
};
服务:
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;
});
};
与其检查全局upvoted
变量,不如针对每个post进行检查。
你的控制器应该是这样的,
$scope.incrementUpvotes = function(post) {
if(!post.hadUpvoted) {
posts.upvote(post);
post.hadUpvoted = true;
}
};
其想法是为每个帖子本地设置upvoted
变量。
希望能有所帮助。如果有任何疑问,请在评论中提问。
upvoted
的作用域为整个控制器,因此当您检查if(!upvoted)
时,如果用户投票一次,则该块将不会运行。请改为选中if(!post.hadUpvoted)
,因为它的作用域是每个帖子。
相关文章:
- 在Angular应用程序中每个帖子投票一次
- 谷歌图表在运行应用程序时只能显示一次
- 在谷歌应用程序脚本中,如何在满足条件的情况下只发送一次电子邮件
- 您可以在节点.js上一次运行多个应用程序吗?
- iOS cordova应用程序中的文本区域只接受一次输入
- 在单页web应用程序中一次只显示特定的表单
- 页面上有两个jQuery应用程序,一次只能运行一个
- 如何每 n 分钟使用数据更新一次 Web 应用程序
- AngularJS应用程序为多个控制器加载和处理一次JSON数据
- 煎茶一次应用一组过滤器
- 将移动用户重定向到应用程序下载一次
- "一页应用程序“;DOM操作而不是AngularJS
- 为什么一个ng应用程序一次工作
- 一次应用多个翻译
- 同一页面上有两个棱角分明的应用程序-一次只能使用一个
- 单页网页应用程序;一次加载所有模板
- 如何通过javascript在web应用程序中全局记录每个dom节点一次的点击
- 混合应用程序使用phoneGap录制视频,每10分钟分裂一次
- Firebase注册一次,登录不同的应用程序
- 在jquery中,聊天应用程序不会每10秒加载一次