【问题标题】:Angular datatables not allowing to sort columns with server side processing角度数据表不允许使用服务器端处理对列进行排序
【发布时间】:2015-07-10 20:13:46
【问题描述】:

我将 angular-datatables 与服务器端处理一起使用,它不允许我对列执行排序。

这是我的 HTML

<table class="table table-striped table-bordered" datatable="" dt-column-defs="dtColumnDefs" dt-options="dtOptions">
    <thead>
        <tr>
            <th translate>NAME</th>
            <th translate>BASIC_UNIT</th>
            <th translate>STATUS</th>
        </tr>
    </thead>
</table>

这是我在相应控制器中的JS

  $scope.dtOptions = DTOptionsBuilder.newOptions()
    .withBootstrap()
    .withOption('order', [0, 'asc'])
    .withOption('ajax', {
      url: 'path/to/server/resource',
      type: 'POST'
    })
    .withDataProp('data')
    .withOption('processing', true)
    .withOption('serverSide', true)
    .withPaginationType('full_numbers');

  $scope.dtColumnDefs = [
    DTColumnDefBuilder.newColumnDef(0)
    .withOption('sName', 'name')

    DTColumnDefBuilder.newColumnDef(1)
    .withOption('sName', 'basic_unit')
    .withOption('bSearchable', false)
    .withOption('bSortable', false),

    DTColumnDefBuilder.newColumnDef(2)
    .withOption('sName', 'status')
    .withOption('bSearchable', false)
    .withOption('bSortable', false)
  ];

有人知道我是否遗漏了什么吗?

【问题讨论】:

    标签: javascript angularjs datatables


    【解决方案1】:

    您使用.withOption('serverSide', true) 启用了服务器端处理。在服务器端处理模式过滤中,分页和排序计算都是由服务器完成的。

    查看客户端在服务器端处理模式下发送的full list of parameters。其中包括:

    search[value]全局搜索值

    columns[i][search][value] 搜索值以应用于此特定列。

    如果你不处理这些参数,那么它会看起来好像没有执行排序。

    解决方案是要么在服务器端实现过滤、分页和排序,要么切换到客户端处理模式。在客户端处理模式下,仍然可以从服务器获取数据,但过滤、分页和排序将由 jQuery DataTables 插件执行。

    更多信息请参见Processing modes

    【讨论】:

    • 我知道你刚才的解释,我确实是在服务器上进行排序、过滤和分页。问题是我的表头不允许“点击”对列进行排序。
    • @lcrespofalco,明白,从问题中并不清楚。否则,您的 DataTables 相关代码看起来不错。我假设您理解,只有“名称”列是可排序的。 &lt;th&gt; 上的 translate 属性看起来也不合适,你确定它应该在那里吗?
    • 是的,我认为我的问题不是那么清楚。 @gyrocode.com,是的,我只想按名称排序,是的,“翻译”在那里是可以的,它是来自 angular-translate 的 I18n 指令。我没有尝试删除该指令,这可能是原因吗?
    • @lcrespofalco,angular-translate 库可能正在更改可能分离点击事件处理程序的标题,删除 translate 值得一试。作为一种解决方法,您可以将需要翻译的文本换成 &lt;span translate&gt;&lt;/span&gt;
    • 感谢@gyrocode.com,我会试一试并告诉你,但奇怪的是,如果没有服务器端处理,一切都运行良好,即使在标头上使用该指令也是如此。
    猜你喜欢
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 2017-07-16
    • 2016-08-15
    • 1970-01-01
    • 2018-03-08
    • 2016-09-08
    相关资源
    最近更新 更多