angular 数据表中括号内数字的排序
Sorting of numbers within brackets in angular datatables
我正在使用 Angular datatables 根据网络服务响应填充我的 table。我的网络服务 returns 我 json 如下所示
[
{
"id": 1,
"name" : "abc",
"count": "(20)"
},
{
"id": 2,
"name" : "abc2",
"count": "20"
},
{
"id": 3,
"name" : "abc3",
"count": "(30)"
}
]
我可以将 JSON 数组绑定到下面 table 中的 $scope 变量
<table datatable="ng" dt-options="dtOptions" dt-column-defs="dtColumnDefs">
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>count</th>
</tr>
</thead>
<tbody ng-repeat= "item in items">
<td> {{item.id}} </td>
<td> {{item.name}} </td>
<td> {{item.count}} </td>
</tbody>
</table>
id 和 name 列已按升序和降序正确排序,但 count 列未根据数字排序。相反,它在排序和排序时考虑了“(”。我希望计数列的排序结果为
升序
20
(20)
(30)
现在我按升序排列
(20)
(30)
20
任何人都可以建议我需要应用什么逻辑吗?
您可以使用列渲染功能。当 dataTables 需要 count
列的值,并希望将值用于 sort
列时,然后传回包含列数据的数字部分的键入数字:
$scope.dtColumnDefs = [
DTColumnDefBuilder
.newColumnDef(2)
.withOption('type', 'number')
.renderWith(function(data, type, full) {
if (type == 'sort') {
var value = data.match(/\d+/);
if (value == null) {
return 0
} else {
value = parseFloat(value[0]);
}
return value.toString().length != data.length ? value+0.0001 : value;
}
return data
})
];
在这里,我将 0.0001
添加到包含非法字符的值,例如 (
- 这样我们可以确保值以正确的顺序显示,即所有 20
都被分组一起 在所有 (20)
之前(或之后)。
演示 -> http://plnkr.co/edit/Zyp0yphHfxnElEjMMOh2?p=preview
注意:我会遍历 <tr>
,而不是 <tbody>
:
<tbody>
<tr ng-repeat="item in items">
<td> {{item.id}} </td>
<td> {{item.name}} </td>
<td> {{item.count}} </td>
</tr>
</tbody>
我正在使用 Angular datatables 根据网络服务响应填充我的 table。我的网络服务 returns 我 json 如下所示
[
{
"id": 1,
"name" : "abc",
"count": "(20)"
},
{
"id": 2,
"name" : "abc2",
"count": "20"
},
{
"id": 3,
"name" : "abc3",
"count": "(30)"
}
]
我可以将 JSON 数组绑定到下面 table 中的 $scope 变量
<table datatable="ng" dt-options="dtOptions" dt-column-defs="dtColumnDefs">
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>count</th>
</tr>
</thead>
<tbody ng-repeat= "item in items">
<td> {{item.id}} </td>
<td> {{item.name}} </td>
<td> {{item.count}} </td>
</tbody>
</table>
id 和 name 列已按升序和降序正确排序,但 count 列未根据数字排序。相反,它在排序和排序时考虑了“(”。我希望计数列的排序结果为
升序
20
(20)
(30)
现在我按升序排列
(20)
(30)
20
任何人都可以建议我需要应用什么逻辑吗?
您可以使用列渲染功能。当 dataTables 需要 count
列的值,并希望将值用于 sort
列时,然后传回包含列数据的数字部分的键入数字:
$scope.dtColumnDefs = [
DTColumnDefBuilder
.newColumnDef(2)
.withOption('type', 'number')
.renderWith(function(data, type, full) {
if (type == 'sort') {
var value = data.match(/\d+/);
if (value == null) {
return 0
} else {
value = parseFloat(value[0]);
}
return value.toString().length != data.length ? value+0.0001 : value;
}
return data
})
];
在这里,我将 0.0001
添加到包含非法字符的值,例如 (
- 这样我们可以确保值以正确的顺序显示,即所有 20
都被分组一起 在所有 (20)
之前(或之后)。
演示 -> http://plnkr.co/edit/Zyp0yphHfxnElEjMMOh2?p=preview
注意:我会遍历 <tr>
,而不是 <tbody>
:
<tbody>
<tr ng-repeat="item in items">
<td> {{item.id}} </td>
<td> {{item.name}} </td>
<td> {{item.count}} </td>
</tr>
</tbody>