Angular DataTables serverSide 更新选项并执行新请求

Angular DataTables serverSide update options and do new request

提问人:Sven 提问时间:4/5/2017 更新时间:4/5/2017 访问量:583

问:

在许多情况下,我非常成功地使用了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;
};
angularjs 服务器端 angular-datatables

评论

0赞 kaushlendras 4/5/2017
你用过changeData()函数吗?
0赞 Sven 4/5/2017
是的,我试过了,例如 但什么也没发生。vm.dtInstance.changeData({ url: 'newRequest', dataSrc: 'payload.list' });

答: 暂无答案