【问题标题】:How to define a filter box out of the ng-table?如何从 ng-table 中定义一个过滤器框?
【发布时间】:2014-08-22 06:38:58
【问题描述】:

全部 我按照http://bazalt-cms.com/ng-table/example/4 的指示在 ng-table 中创建了一个过滤框

我的代码与示例相同: 在 html 中创建过滤器:

<table ng-table="tableParams" show-filter="true" class="table">
    <tr ng-repeat="user in $data">
        <td data-title="'Name'" filter="{ 'name': 'text' }">

现在我们可以看到布局了:

但我不想要表格中的过滤框,像这样:

文件管理器在桌子上方 我的过滤框代码:

<input type="text" ng-model="filter.name" />
<table ng-table="tableParams" show-filter="false" class="table">
    <tr ng-repeat="user in $data">
        <td data-title="'Name'" filter="{ 'name': 'text' }">
            {{user.name}}
        </td>

...使用ng-model="filter.name"进行绑定,但是不起作用...

有没有办法实现我的想象?

【问题讨论】:

标签: javascript angularjs ngtable self-referencing-table


【解决方案1】:

帕姆错了。你永远不应该在 ngtable 或任何已经完成它的组件之后过滤。否则,你会有意想不到的事情发生。

只需修改您的表格参数并通过引用您的过滤器对象进行绑定:

$scope.filter = {name: 'T'};
$scope.tableParams = new ngTableParams({
    page: 1,            // show first page
    count: 10,          // count per page
    filter: $scope.filter
}, {
    total: data.length, // length of data
    getData: function($defer, params) {
        // use build-in angular filter
        var orderedData = params.filter() ?
               $filter('filter')(data, params.filter()) :
               data;

        $scope.users = orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count());

        params.total(orderedData.length); // set total for recalc pagination
        $defer.resolve($scope.users);
    }
});

并删除 tr 中的过滤器内容

<input type="text" ng-model="filter.name"/>
<table ng-table="tableParams"  class="table">
    <tr ng-repeat="user in $data">
        <td data-title="'Name'" >
            {{user.name}}
        </td>
        <td data-title="'Age'">
            {{user.age}}
        </td>
    </tr>
</table>

通过这种方式,数据会在数据重新加载时过滤,而不是在数据显示时过滤。您的 $scope.filter 绑定在 UI 上并由 ngTable 监视。

Demo on Plunker

【讨论】:

  • 你是救生员。我发现 ng-table 中自定义过滤器输入的最佳实现。
【解决方案2】:

我试图关注@Clems 的回答,但无济于事。做了一些研究,我从ngTable Github repository 找到了一个解决方案,并且有很多更简单的解决方案。

<input type="text" ng-model="tableParams.filter()['name']" />
<table ng-table="tableParams" show-filter="false" class="table">
    <tr ng-repeat="user in $data">
        <td data-title="'Name'" filter="{ 'name': 'text' }">
            {{user.name}}
        </td>
     </tr>
</table>

虽然唯一的问题(我现在正试图找出)是如何通过单个输入过滤多个列。希望这会有所帮助

【讨论】:

    【解决方案3】:

    你可以这样做:

    1. 创建一个单独的文本框和一个单独的表格。 ng-model 文本框的属性应该是您需要的属性 过滤数据。所以,这个文本框可以放在页面的任何地方。

      <input type="text" ng-model="name" />
      
    2. 使用ng-repeat 绘制表格并提供一个带有 ng-model 中为文本框提供的值。

      <tr ng-repeat="item in items|filter:name">
      

    这是一个示例:

    <table>
                <th>Item Name</th>
                <th>Item Price</th>
                <tr ng-repeat="item in items|filter:name">
                    <td>{{item.name}}</td>
                    <td>{{item.price}}</td>
                </tr>
    
    </table>
    <input type="text" ng-model="name" />
    

    【讨论】:

    • 这是个坏主意,尤其是对于使用getData 函数的人。
    猜你喜欢
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 2015-02-24
    • 2016-10-27
    • 2015-11-18
    • 1970-01-01
    相关资源
    最近更新 更多