2017-02-23 332 views
1

我在一个Angular2项目中使用DataTables serverSide带参数的DataTables ajax.reload()

我想重新加载表进行更改后,我想通过AJAX将这些更改作为参数传递给POST。

的事情是,数据表总是从初始化获得options对象,而不是一个更新的版本与新参数

那么,我需要的是是,用ajax.reload()传递一组新的参数。

这是我目前的功能:

filterData(tableParams) { 
    console.log('reloading DT. tableparams received are: ' + JSON.stringify(tableParams)); 

    let element = $(this.el.nativeElement.children[0]); 
    let table = element.find('table.dataTable'); 
    table.DataTable().ajax.reload(); 
} 

此刻,你可以看到,我没有使用tableParams,这是因为我想展现一个干净的版本,我的功能,我试过很多事情并没有一个工作。

DataTables总是获取初始参数为options的对象

这是我绝望的尝试之一:

filterData(tableParams) { 
    let element = $(this.el.nativeElement.children[0]); 
    let table = element.find('table.dataTable'); 
    table.DataTable({ 
     ajax: { 
      url: this.jsonApiService.buildURL('/test_getUsers.php'), 
      type: 'POST', 
      data: tableParams, 
     }, 
    }).ajax.reload(); 
} 

一些帮助,将不胜感激。如果您需要关于如何创建DataTable的更多解释或更多代码片段让我知道。但我认为这个问题只是在ajax.reload()函数中,能够发送更新的参数将解决问题。

非常感谢!

编辑1

这是我的init options对象:

  let data = { 
       email: true, 
       test: 'init', 
      }; 

      this.options = { 
       dom: 'Bfrtip', 
       processing: true, 
       serverSide: true, 
       pageLength: 20, 
       searchDelay: 1200, 
       ajax: { 
        url: this.jsonApiService.buildURL('/test_getUsers.php'), 
        type: 'POST', 
        data: data, 
       }, 
       columns: [ 
        {data: 'userId'}, 
        {data: 'userCode'}, 
        {data: 'userName'}, 
        {data: 'userRole'}, 
        {data: 'userEmail'}, 
       ], 
      }; 

而这些是数据表被发送参数:

enter image description here

(在其他数据表参数)

当我打电话给ajax.reload()时,无论我尝试过什么,我最终都会发送这些相同的参数,因此会发送init参数。

回答

5

我终于找到了解决办法,问题是我太专注于通过DataTable().ajax.reload()实现我的目标。我想通过这种或那种方式传递参数,这是不正确的。我不得不改变options对象的构造。 正如前面看到的,我被分配我的自定义参数options对象是这样的:

ajax: { 
    url: this.jsonApiService.buildURL('/test_getUsers.php'), 
    type: 'POST', 
    data: this.params, 
} 

data: this.params会得到从某处的数据,在我的情况,我有2个监听器,一个用于INIT另一个为更新即改变this.params的值。这个,而不是听众可能是onChange(),但的关键是参数在运行时更改。

所以我只需将它放入一个函数中,并将DataTable的参数合并到我自己的参数中。

这是我的解决方案:

data: function (d) { 
    Object.assign(d, myClass.params); 
    return d; 
} 

有了这个options对象,当我必须刷新数据表发送新的参数到服务器,我只需拨打ajax.reload()。 DataTables将获得最新的dataoptions对象并重新加载它自己。

我真的希望这可以帮助别人!良好的工作和快乐的编码!