У меня есть таблица json-данных, я могу сортировать ее по различным столбцам. Когда я сортирую его по любым столбцам и нажимаю кнопку "Удалить", он удаляет неправильный, индекс $ index не обновляется, и я не знаю, как его исправить.
Код JS:
$scope.friends =
[{name:'John', phone:'555-1212', age:10},
{name:'Mary', phone:'555-9876', age:19},
{name:'Mike', phone:'555-4321', age:21},
{name:'Adam', phone:'555-5678', age:35},
{name:'Julie', phone:'555-8765', age:29}];
$scope.predicate = 'age';
$scope.reverse = false;
$scope.order = function(predicate) {
$scope.reverse = ($scope.predicate === predicate) ? !$scope.reverse : false;
$scope.predicate = predicate;
};
$scope.delete = function (friend, index) {
$scope.friends.splice(index, 1);
};
Код HTML:
<table class="friend">
<tr>
<th>
<a href="" ng-click="order('name')">Name</a>
<span class="sortorder" ng-show="predicate === 'name'" ng-class="{reverse:reverse}"></span>
</th>
<th>
<a href="" ng-click="order('phone')">Phone Number</a>
<span class="sortorder" ng-show="predicate === 'phone'" ng-class="{reverse:reverse}"></span>
</th>
<th>
<a href="" ng-click="order('age')">Age</a>
<span class="sortorder" ng-show="predicate === 'age'" ng-class="{reverse:reverse}"></span>
</th>
</tr>
<tr ng-repeat="friend in friends | orderBy:predicate:reverse">
<td>{{friend.name}}</td>
<td>{{friend.phone}}</td>
<td>{{friend.age}}</td>
<td><button ng-click="delete(friend, $index)">Delete</button></td>
</tr>
</table>
Ссылка на плунжер:
Просто обновил свою функцию в плункере.
Пока у вас есть объект, не используйте $ index. Вместо этого используйте объект
$scope.delete = function (friend) {
$scope.friends.splice($scope.friends.indexOf(friend), 1);
};
Это делает работу.