如何在angularjs中从表格中删除单个字段
在AngularJS中,如果要删除表格中的单个字段,需要从数组中删除该字段,并可以将
在控制器中:
$scope.remove = function(item) {
var index = $scope.bdays.indexOf(item);
$scope.bdays.splice(index, 1);
}
Angular会自动检测到bdays数组的更改,并更新
解决方法:
可以使用
<a class="btn" ng-click="remove(item)">Delete</a>
标记中的ng-click指令将项目传递给删除函数,并在控制器中找到项目的索引并从数组中删除。
DEMO: http://plnkr.co/edit/ZdShIA?p=preview
如果使用服务器进行实时更新,可以使用使用$resource
创建的服务来管理数组更新和服务器的同步更新。
在模板上直接使用$index
可能会在模板过滤时产生错误。更安全的做法是使用ng-click='remove(bday)'
而不是arr.splice(arr.indexOf(bday),1);
如果未找到.indexOf(item)
,将返回-1,如果不进行检查,可能会导致删除数组末尾的项。
可以使用polyfill解决IE9以下的兼容问题:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 另外,最新版本的Angular不再支持IE9以下的版本。
在Array.prototype.splice()
的文档中查找(index,1)的含义。
如果在所有项目中都有messages.html
中的HTML,不想在所有控制器中更新这个小片段,可以考虑使用指令或服务来处理该功能。
如果要执行“撤消”操作,可以将项目推回到数组中,并使用此方法删除的信息。
问题的出现原因:
- 两个回答中的代码示例有一处错误,参数传递和控制器中的变量名不一致。
解决方法:
- 更正代码示例中的错误,确保参数传递和控制器中的变量名一致。
- 使用indexOf
方法时,确保浏览器版本是IE9及以上。
- 如果在ng-repeat
中使用了orderBy
或filter
,以上代码示例将无法正常工作。
- 如果在ng-repeat
中使用了track by $index
,可以使用以下代码示例。
- 如果使用了分页,$index
在每个页面中不会更改,始终从零开始,因此以上代码示例在使用分页时不适用。
- 以上代码示例即使使用了track by $index
也无法正常工作。
正确的答案:
Delete $scope.remove=function($index){ $scope.bdays.splice($index,1); }
以上是关于如何在AngularJS中从表格中删除单个字段的问题的原因和解决方法的整理。