在表中,获取数组中的选定行ID

时间:2016-06-13 12:27:11

标签: angularjs angular-datatables

在表格中,每一行都与复选框相关,并且可以选中所有行。 我想在数组中获取表的选定行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;
        }
    });
}

2 个答案:

答案 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 });