在使用angular-datatables(Homepage)将数据初始加载到表中之后,我打算更改重新加载和显示数据的时间范围。使用两个日期时间输入字段选择范围。但是,所有后续请求都不会修改dtOptions对象中的时间窗口参数。

奇怪的是,当我console.log修改后的dtOptions对象时,更改似乎生效,即-dtOptions的data属性反映了新选择的时间范围。在Chrome的“开发人员工具”的“网络”标签中检查请求后,表明仍使用了旧的时间范围值,这不会导致表条目的更新。



例:

每当我发布新数据时,这就是在“开发人员工具”的“网络”标签中获得的{from, to}值:

Origin:http://localhost:9000
Referer:http://localhost:9000/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)                     Chrome/37.0.2062.120 Safari/537.36
Form Dataview sourceview URL encoded
->from:1412172055200
->to:1412690455222


虽然在“控制台”选项卡中等效,但是发出console.log($scope.dtOptions);时实际上反映了我预先选择的时间范围。

Object {ajax: Object, reload: true, integrateBootstrap: false, hasColVis: false, hasColReorder: false…}
    ajax: Object
        data: Object
            ->from: 1412518000453
            ->to: 1412690800493
            __proto__: Object
            datatype: "json"
            type: "POST"


在调用from之前,我尝试了多种方法来更新/重写有效负载中的to$scope.dtOptions.reloadData()值:直接写入$scope.dtOptions.ajax.from,尝试传递更新的payload对象,以及最新尝试(下面的代码给出一个想法)-使用newOptions()重新创建dtOptions对象。

var payload = {
                from: tFrom,
                to: tTo
            };

$scope.dtOptions = DTOptionsBuilder.newOptions()
                .withOption('ajax', {
                    url: constantCfg.apiEndpoint+constantCfg.uri.usersStats,
                    type: 'POST',
                    data: payload
                });

$scope.dtOptions.reloadData();
console.log($scope.dtOptions); <- causes 'Console' tab output discussed above


在“控制台”选项卡中打印时,所有方法都会更新有效负载的值,但在“网络”选项卡中的请求仍指示旧时间范围值的使用。

我尝试更新payload对象的方法均未引起任何其他警告或错误。

最佳答案

实际上,您需要将ajax.data定义为一个函数,并定义要发送到服务器的参数。

var from = 1412518000453,
    to = 1412690800493;
$scope.dtOptions = DTOptionsBuilder.newOptions()
    .withOption('ajax', {
         url: constantCfg.apiEndpoint+constantCfg.uri.usersStats,
         type: 'GET',
         data: function(d) {
             d.from= from;
             d.to = to;
         }
     });
$scope.reloadData = function() {
    // Compute your from/to variables
    from = 1412518000463;
    to = 1412690800593;
    $scope.dtOptions.reloadData();
};

08-19 03:11