2015-11-24 40 views
1

以下代碼取自Code Academy的AngularJS課程。在第一課中,給用戶提供了「喜歡」或「不喜歡」評分選項。一旦用戶點擊「喜歡」按鈕,表決就會上升,同樣,用戶點擊「不喜歡」按鈕將投票添加到負數。但是,代碼中沒有辦法限制用戶僅投票一次。有沒有辦法限制用戶只能使用AngularJS投票一次?有沒有辦法在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; 
 
    }; 
 
    } 
 
]);

回答

0

是的,只是標記陣列中的對象。

$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; 
    } 
}; 

你必須如果希望給予好評否定一個downvote(反之亦然)的微微有點增加更多,但是這是微不足道的。