Angular 数据表 select 过滤器无法使用 0 或假值
Angular datatable select filter not working with 0 or false value
我正在使用 Angular datatable in Server side processing mode(Ajax) And use Light Column Filter 插件来过滤每列中的数据。
HTML
<table datatable dt-options="dtOptions" dt-columns="dtColumns"></table>
数据表配置
DTOptionsBuilder.dtOptions = DTOptionsBuilder.fromSource()
.withOption('processing', true)
.withOption('serverSide', true)
.withDataProp('data')
.withPaginationType('full_numbers')
.withOption('ajax', {
url: '/products',
type: 'GET',
headers: {Authorization: 'Bearer ' + $auth.getToken()},
error: function (xhr, error) {
$log.error(error);
},
complete: function (data) {
$log.log('Done');
}
})
.withLightColumnFilter({
'0': {type: 'text'},
'1': {
type: 'select',
values: [
{ value: 1, label: 'Yes'},
{ value: 0, label: 'No'}
]
}
});
创建列
$scope.dtColumns = [
DTColumnBuilder.newColumn('title').withTitle('title').renderWith(function(data) {
return data;
}),
DTColumnBuilder.newColumn('for_sale').withTitle('for sale').renderWith(function(data){
return data; // 0, 1 or true, false
})
]
使用 type:'text'
的过滤器是正确的并且工作正常。但是用 type:'select'
过滤是不正确的!换句话说,当我 select Yes 过滤器工作并且过滤数据时,但是当 select No 结果为空.
我用 0,1
和 true,false
测试了 select 值。在这两种方式中,具有 true 或 1 值的选项都是正确的,但是 具有 0 或 false 值的选项是不正确的。
您认为问题出在哪里?
您将值定义为数字
values: [
{ value: 1, label: 'Yes'},
{ value: 0, label: 'No'}
]
但是你 return 字符串
return data; // 0, 1 or true, false
数据将总是 是一个字符串,因为源是JSON。尝试强制设置为字符串和 return '0'
和 '1'
:
{ value: '1', label: 'Yes'},
{ value: '0', label: 'No'}
和
return data == '0' || data == 'false' ? '0' : '1'
我正在使用 Angular datatable in Server side processing mode(Ajax) And use Light Column Filter 插件来过滤每列中的数据。
HTML
<table datatable dt-options="dtOptions" dt-columns="dtColumns"></table>
数据表配置
DTOptionsBuilder.dtOptions = DTOptionsBuilder.fromSource()
.withOption('processing', true)
.withOption('serverSide', true)
.withDataProp('data')
.withPaginationType('full_numbers')
.withOption('ajax', {
url: '/products',
type: 'GET',
headers: {Authorization: 'Bearer ' + $auth.getToken()},
error: function (xhr, error) {
$log.error(error);
},
complete: function (data) {
$log.log('Done');
}
})
.withLightColumnFilter({
'0': {type: 'text'},
'1': {
type: 'select',
values: [
{ value: 1, label: 'Yes'},
{ value: 0, label: 'No'}
]
}
});
创建列
$scope.dtColumns = [
DTColumnBuilder.newColumn('title').withTitle('title').renderWith(function(data) {
return data;
}),
DTColumnBuilder.newColumn('for_sale').withTitle('for sale').renderWith(function(data){
return data; // 0, 1 or true, false
})
]
使用 type:'text'
的过滤器是正确的并且工作正常。但是用 type:'select'
过滤是不正确的!换句话说,当我 select Yes 过滤器工作并且过滤数据时,但是当 select No 结果为空.
我用 0,1
和 true,false
测试了 select 值。在这两种方式中,具有 true 或 1 值的选项都是正确的,但是 具有 0 或 false 值的选项是不正确的。
您认为问题出在哪里?
您将值定义为数字
values: [
{ value: 1, label: 'Yes'},
{ value: 0, label: 'No'}
]
但是你 return 字符串
return data; // 0, 1 or true, false
数据将总是 是一个字符串,因为源是JSON。尝试强制设置为字符串和 return '0'
和 '1'
:
{ value: '1', label: 'Yes'},
{ value: '0', label: 'No'}
和
return data == '0' || data == 'false' ? '0' : '1'