提问人:Sven 提问时间:4/5/2017 更新时间:4/5/2017 访问量:583
Angular DataTables serverSide 更新选项并执行新请求
Angular DataTables serverSide update options and do new request
问:
在许多情况下,我非常成功地使用了angular-datatables。但现在我得到了一个特殊的:数据来自服务器端,我有一个外部过滤器字段。筛选器应筛选不同的列(服务器端)。我想我可以在选项“withFnServerData”中修改aoData。但从未调用新请求。我尝试了 reloadData 并重新渲染,但 reloadData 不会询问服务器并重新渲染再次执行旧请求,而不是修改后的请求。
$scope.surNameChanged = function() {
var table = $('#test').DataTable();
var predefinedFiltersNew = {0: {name: 'surName', value: $scope.surName}};
vm.dtOptions = DataTableService.generalOptions('namesFiltered', null, 0, 'asc', false, predefinedFiltersNew);
// vm.dtInstance.reloadData();
// vm.dtInstance.rerender();
};
DataTableService.generalOptions:
r.generalOptions = function(address, filterColumns, defaultOrderColumn = 0, defaultOrderColumnDir = 'asc', footerCallback = false, predefinedFilters = null, search = false){
var dtOptions = DTOptionsBuilder.newOptions()
.withFnServerData(
function (sSource, aoData, fnCallback, oSettings) {
/**
Filter
**/
for(var filt in predefinedFilters){
var x = 0;
for(var col in aoData[1].value){
if(aoData[1].value[col].data == predefinedFilters[filt].name){
aoData[1].value[col].search.value = predefinedFilters[filt].value;
}
x++;
}
}
$http({
method: 'POST',
url: url + address,
data: {
start: aoData[3].value,
length: aoData[4].value,
draw: aoData[0].value,
order: aoData[2].value,
search: aoData[5].value,
columns: aoData[1].value
},
headers: {
'Content-type': 'application/json'
}
})
.then(function(result) {
var records = {
'draw': result.data.draw,
'recordsTotal': result.data.recordsTotal,
'recordsFiltered': result.data.recordsFiltered,
'data': result.data.data
};
if(result.data.totalTime != null){
r.totalTime = result.data.totalTime;
}
if(result.data.totalTimeFiltered != null){
r.totalTimeFiltered = result.data.totalTimeFiltered;
}
fnCallback(records);
});
}
)
.withDataProp('data')
.withOption('processing', true)
.withOption('serverSide', true)
.withOption('bAutoWidth', true)
.withOption('sLengthSelect', "ui selection dropdown")
.withOption('order', [defaultOrderColumn, defaultOrderColumnDir])
.withPaginationType('full_numbers');
if(filterColumns != null){
dtOptions.lightColumnFilterOptions = filterColumns;
dtOptions.hasLightColumnFilter = true;
}
if(search == true){
dtOptions.sDom = 'lrftip';
}
else{
dtOptions.sDom = 'lrtip';
}
return dtOptions;
};
答: 暂无答案
评论
vm.dtInstance.changeData({ url: 'newRequest', dataSrc: 'payload.list' });