2017-02-23 88 views
1

Я использую DataTables serverSide в проекте Angular2.DataTables ajax.reload() с параметрами

Я пытаюсь перезагрузить таблицу после внесения изменений, и те изменения, которые я хочу передать им в качестве параметров в POST через AJAX.

Дело в том, что DataTables всегда получает объект 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(), возможность отправки обновленных параметров решит проблему.

Большое спасибо!

Edit 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'}, 
       ], 
      }; 

И это параметры, которые DataTables является отправка:

enter image description here

(Среди других DataTables параметры)

Когда я звоню 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 слушателей, один для инициализации и другое для обновление что изменение this.params значение. Это, а не слушатель может быть onChange(), но Дело в том, что параметры меняются во время выполнения.

Поэтому я просто должен был включить это в функцию и объединить параметры DataTable с моими собственными параметрами.

Это мое решение:

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

С помощью этого options объекта, когда я должен обновить DataTable отправки новых параметров на сервер, я просто позвонить ajax.reload(). DataTables получит объект options с последним data и перезагрузите его.

Я действительно надеюсь, что это может помочь кому-то! Хорошая работа и счастливое кодирование!

Смежные вопросы