在表格中,每一行都与复选框相关,并且可以选中所有行。 我想在数组中获取表的选定行ID。
这是plunker code。
HTML:
<table id="datatable-buttons" class="table table-striped table-bordered">
<thead>
<th>
<input type="checkbox" ng-model="selectRowId" ng-click="selectedAll()">
</th>
</thead>
<tbody ng-init="get_product()">
<!--step 6-->
<tr ng-repeat="product in filtered = (pagedItems| filter:search | orderBy : predicate :reverse) | startFrom:currentPage * entryLimit | limitTo:entryLimit | findobj:multipleVlaue | searchFor:searchString"> <!-- searchFor:searchString -->
<td>
<input type="checkbox" ng-model="selctedIds[product.id]" ng-checked="product.deleted">
</td>
</tr>
</tbody>
</table>
控制器:
$scope.selectedAll = function () {
$scope.pagedItems.forEach(function (product) {
if ($scope.selectRowId) {
product.deleted = true;
} else {
product.deleted = false;
}
});
}
答案 0 :(得分:3)
如果你想要一些可扩展的东西,可以容纳复杂的过滤,分页等等,那么我建议你为每个对象写一个 angular 属性。所以对于复选框,我们想要像这样切换这个布尔值:
<input type="checkbox" ng-model="item.$selected"/>
要切换所有/无,您需要点击控制器功能:
$scope.toggleAll = function(bSelect){
itemArray.forEach( function(item){ item.$selected = bSelect; })
}
我建议使用类似$selected
的$前置所选值的原因是您使用对象进行的任何HTTP调用,Angular将在转换为JSON之前删除任何$property
,以防万一你的后端有问题。
我建议使用过滤器来提取ID:
<div>{{ itemArray | getSelIds }}</div>
和过滤器
.filter( 'geSeltIds', function(){
return function(items){
//if you happen to use lodash
return _.chain(items).filter({$selected:true}).map('id').value()
//manual
ids = []
items.forEach(function(item){
if(item.$selected)
ids.push(item.id)
})
return ids
}
})
答案 1 :(得分:0)
此过滤器更清洁:
.filter( function (item) {
return item.$selected;
}).map(function (item) { return item.id });