如何使用单个文本框基于任何列数据过滤行

时间:2013-10-30 04:51:56

标签: angularjs angularjs-directive angular-ui ngtable

我正在使用ng-table

我尝试使用example中提供的过滤器,但是为了过滤每个列,我需要单独的文本框。

但我想要实现的是,一个文本框可以根据任何列数据搜索任何行。

我怎样才能实现这个目标?

就像jquery datatable搜索框一样。

2 个答案:

答案 0 :(得分:10)

这就是我的做法

<强> HTML

    <input type="text" ng-model="searchUser">

    <table ng-table="tableParams">
      <tr ng-repeat="user in $data">
        ...
      </tr>
    </table>

<强>脚本

        var usersData = []; // initial data

        $scope.tableParams = new ngTableParams({
            page: 1,           
            count: 7
        }, {
        counts : [7,14,21,28],          
        getData: function($defer, params) {
            var searchedData = searchData();
            params.total(searchedData.length);
            $scope.users = searchedData.slice((params.page() - 1) * params.count(), params.page() * params.count());
            $defer.resolve($scope.users);                           
        },
        $scope: { $data: {} }
    });


$scope.$watch("searchUser", function () {
    $scope.tableParams.reload();
});

var searchData = function(){
    if($scope.searchUser)
       return $filter('filter')(usersData,$scope.searchUser);
    return usersData;
}

剩余默认ngtable配置。

答案 1 :(得分:1)

根据原始问题,如果您最初加载所有数据,那么它非常简单。我使用此http://ng-table.com/#/filtering/demo-api作为参考,然后使用ng-change添加了typeahead过滤。

查看:

<form name="awesomeForm" novalidate>
<div class="input-group">
    <input type="text" class="form-control" placeholder="Search term" name="searchTerm" ng-model="globalSearchTerm" ng-change="applyGlobalSearch(globalSearchTerm)" required />
    <span class="input-group-btn">
        <button class="btn btn-default" type="submit" >
            <span class="glyphicon glyphicon-search"></span>
        </button>
    </span>
</div>
</form>

在您的控制器中(在您加载表格中的数据后):

$scope.applyGlobalSearch = function(term) {
    $scope.tableParams.filter({ $: term });
}