javascript - 有没有办法在 AngularJs 中只投赞成票或反对票一次?

标签 javascript angularjs

以下代码取自 Code Academy 的 AngularJS 类(class)。在第一课中,向用户提供了“喜欢”或“不喜欢”的评级选项。一旦用户点击“喜欢”按钮,投票就会上升,同样,用户点击“不喜欢”按钮,投票就会增加到减号。但是代码中没有办法限制用户只能投赞成票或反对票一次。有没有办法使用 AngularJS 限制用户投票一次?

html代码

<div class="rating">
        <p class="likes" ng-click="plusOne($index)">+{{product.likes}}</p>
        <p class="dislikes" ng-click="minusOne($index)">-{{product.dislikes}}</p>
</div>

AngularJS 代码

app.controller('MainController', ['$scope',
  function($scope) {
    $scope.title = 'Top Sellers in Books in this Great City';
    $scope.promo = 'Our Christmas Promo is on the way!';
    $scope.products = [{
      name: 'The Book of Trees',
      price: 19,
      pubdate: new Date('2014', '03', '08'),
      cover: 'img/the-book-of-trees.jpg',
      likes: 0,
      dislikes: 0
    }, {
      name: 'Program or be Programmed',
      price: 8,
      pubdate: new Date('2013', '08', '01'),
      cover: 'img/program-or-be-programmed.jpg',
      likes: 0,
      dislikes: 0
    }, {
      name: 'Book1',
      price: 8,
      pubdate: new Date('2015', '04', '02'),
      cover: 'img/..',
      likes: 0,
      dislikes: 0
    }, {
      name: 'Book2',
      price: 8,
      pubdate: new Date('2015', '09', '09'),
      cover: 'img/..',
      likes: 0,
      dislikes: 0
    }];
    $scope.plusOne = function(index) {
      $scope.products[index].likes += 1;
    };
    $scope.minusOne = function(index) {
      $scope.products[index].dislikes += 1;
    };
  }
]);

最佳答案

是的,只需标记数组中的对象即可。

$scope.plusOne = function(index) {
    if(!$scope.products[index].upvoted){
      $scope.products[index].likes += 1;
      $scope.products[index].upvoted = true;
    }
};
$scope.minusOne = function(index) {
    if(!$scope.products[index].downvoted){
      $scope.products[index].dislikes += 1;
      $scope.products[index].downvoted = true;
    }
};

如果您希望通过赞成票来否定反对票(反之亦然),则必须添加更多内容,但这很简单。

关于javascript - 有没有办法在 AngularJs 中只投赞成票或反对票一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33899998/

相关文章:

android - Meteor+Cordova - Android 上的 "deviceready has not fired"

javascript - 如何限制某些文件格式上传?

angularjs - 我如何在 AngularJS 的数据绑定(bind)中放置一个条件?

AngularJS 不使用 socket.io 刷新 View

javascript - 禁用 HTML 表单上的多次提交

javascript - 如何为这样的对象定义 JSDoc?

javascript - 试图理解回调函数

javascript - 如何在 Angular Material 动画之后执行代码

javascript - 作为 prop 传递的数组不反射(reflect)更改

javascript - 如何使用 GET 作为方法在 Ajax 请求上发送括号 "%5B" "%5D"作为参数?