如何从AngularJS作用域中的数组中删除项目?

2022-08-30 02:40:58

简单的待办事项列表,但每个项目的列表页面上都有一个删除按钮:

enter image description here

相关模板 HTML:

<tr ng-repeat="person in persons">
  <td>{{person.name}} - # {{person.id}}</td>
  <td>{{person.description}}</td>
  <td nowrap=nowrap>
    <a href="#!/edit"><i class="icon-edit"></i></a>
    <button ng-click="delete(person)"><i class="icon-minus-sign"></i></button>
  </td>
</tr>

相关控制器方法:

$scope.delete = function (person) {
  API.DeletePerson({ id: person.id }, function (success) {
    // I need some code here to pull the person from my scope.
  });
};

我试过了和.$scope.persons.pull(person)$scope.persons.remove(person)

尽管已成功删除数据库,但我无法从作用域中拉取此项,并且我不想对客户端已有的数据进行方法调用,我只想从作用域中删除此人。

有什么想法吗?


答案 1

您必须在数组中找到 的索引,然后使用数组的拼接方法:personpersons

$scope.persons.splice( $scope.persons.indexOf(person), 1 );

答案 2

您的问题实际上并不在于Angular,而在于Array方法。从数组中删除特定项的正确方法是使用 Array.splice。此外,使用 ng-repeat 时,您可以访问特殊属性,这是您传入的数组的当前索引。$index

解决方案实际上非常简单:

视图:

<a ng-click="delete($index)">Delete</a>

控制器:

$scope.delete = function ( idx ) {
  var person_to_delete = $scope.persons[idx];

  API.DeletePerson({ id: person_to_delete.id }, function (success) {
    $scope.persons.splice(idx, 1);
  });
};