2016-02-26 7 views
1

Работа над проектом, в котором пользователи могут голосовать по элементам, а после orderBy функция работает только с исходными индексами элементов. Я хотел бы отслеживать элементы по свойству ID, которое вытаскивается из базы данных, но у меня проблемы. Я также пробовал передавать объекты, а не их индексы, но опять-таки у меня проблемы с головой.

Соответствующие JS

angular.module("cardSite", ['masonry']) 
    .controller('mainCtrl', function($scope, dataService) { 
     $scope.cards = []; 
     dataService.getCards().then(function(response) { 
      $scope.cards = response.data; 
     }, function() {}); 

     $scope.plusOne = function($index) { 
      $scope.cards[$index].card_rating += 1; 
     }; 
    }); 

Соответствующие HTML

<div class="col-lg-3 tile grid-item" ng-repeat="card in cards | orderBy : '-card_rating' | limitTo:8 track by card.ID"> 
<div class="panel panel-default {{ card.card_category | lowercase }}_panel"> 
    <p>Card ID: {{card.ID}}</p> 
    <!DOCTYPE svg> 
    <p ng-click="plusOne($index)"> Vote up</p> 
    <p>{{card.card_rating}}</p> 
</div> 

Кто-нибудь есть какие-либо предложения?

+0

дубликата http://stackoverflow.com/a/16118904/820942 – Tom

ответ

3

Зачем вам нужен ваш индекс в этом случае?

Вы можете просто передать объект непосредственно:

<p ng-click="plusOne(card)"> Vote up</p> 

И изменить функцию:

$scope.plusOne = function(card) { 
     card.card_rating += 1; 
}; 
+0

Я усложнять проблема кажется, это было именно то, что мне нужно, спасибо! – Jackanapes

+0

Np! Легко переусердствовать! Не стесняйтесь принять ответ, если он решит вашу проблему :) – CmdrTchort

+0

Просто ждал, когда закончится 10 минут! еще раз спасибо – Jackanapes