2016-01-21 2 views
0

Я делаю стол с AngularJS. Я использовал orderBy фильтр. После этого моя функция удаления начала удалять другую строку, кроме того, что я нажимаю для удаления.Неверное удаление строки с orderBy filter angularjs

Вот фильтр:

<tr class = "table-row isActive-{{task.active}} rowNumber-{{$index + 1}}" ng-repeat = "task in tasks | filter:search:strict | orderBy: '-priority':true"> 
    <td> 
     <span class="delete-link"> 
      <input type="button" data-ng-click="removeRow($index)"/> 
     </span> 
    </td> 
</tr> 

и функция удаления:

$scope.removeRow = function (productIndex) { 
    $scope.tasks.splice(productIndex, 1); 
    productIndex=0 
}; 

, что я пропустил?

+1

Вы должны использовать один и тот же порядок, в 'removeRow' функции. Порядок по фильтру, применяемый в ng-repeat, не упорядочивает сам массив. –

ответ

1

$index представляет собой индекс в отображаемой таблице. Однако вы удаляете по индексу в исходном массиве. orderBy: не сортирует исходный массив, но передает упорядоченную копию на ng-repeat.

Решение: У вас есть два варианта:

  1. Сортировать оригинальный массив и не использовать orderBy:

  2. Не идентифицировать элемент для удаления по его индексу, а по его id или самой фактической записи. Пример:

    $scope.removeRow = function (task) { 
        $scope.tasks.splice($scope.tasks.indexOf(task), 1); 
    }; 
    
Смежные вопросы