2016-03-23 8 views
2

Я использую angularjs Datatables и продолжаю работать с ошибкой.angularjs Datatables Не удается перезагрузить таблицу Ошибка

DataTables Warning: table id = DataTables_Table_0 - Невозможно повторно инициализировать Datatable.

У меня есть два часа для запуска отчета, когда пользователь меняет ввод.

$scope.dtInstance = {}; 
$scope.dtOptions = DTOptionsBuilder.newOptions().withPaginationType('full_numbers') 
                .withOption('responsive', true) 
                .withOption("autoWidth", false) 
                .withDOM('lfrtBip') 
                .withButtons(['copy', 'print', 'pdf', 'csv', 'excel']); 


$scope.dtColumns = [ 
    DTColumnBuilder.newColumn('display_name').withTitle('Name'), 
    DTColumnBuilder.newColumn('state_desc').withTitle('State'), 
    DTColumnBuilder.newColumn('state_Type').withTitle('State Type'), 
    DTColumnBuilder.newColumn('adjustedClientStartState').withTitle('State Start Date'), 
    DTColumnBuilder.newColumn('adjustedClientEndState').withTitle('State End Date'), 
    DTColumnBuilder.newColumn('timeInStateSeconds').withTitle('Seconds'), 
    DTColumnBuilder.newColumn('timeInStateMinutes').withTitle('Minutes'), 
    DTColumnBuilder.newColumn('timeInStateHour').withTitle('Hours'), 
]; 

$scope.$watch('hours', function (newVal, oldVal) 
{ 
    if (!newVal) return; 

    runReport($scope.selectedClient.id, newVal); 

}); 

$scope.$watch('selectedClient', function (newVal, oldVal) 
{ 
    if (!newVal) return; 

    runReport(newVal.id, $scope.hours); 

}); 

var runReport = function (clientId, hours) 
{ 
    if (clientId != 'undefined' && clientId != undefined) 
    { 
     ubernurseService.ClientStateHistory(clientId, hours).then(function (results) 
     { 


      $scope.states = results.data; 

      if (results.data.length > 0) 
      { 
       $scope.notVisible = false; 
      } 
      else 
      { 
       $scope.notVisible = true; 
      } 
     }, function (error) 
     { 
      //alert(error.data.message); 
     }); 
    } 

} 

И в моем шаблоне

<div class="row"> 
      <div class="col-md-10 col-md-offset-1"> 
       <table datatable="ng" dt-options="dtOptions" dt-columns="dtColumns" dt-instance="dtInstance" class="table table-hover table-striped"> 
        <thead> 
         <tr> 
          <th>Name</th> 
          <th>State</th> 
          <th>State Type</th> 
          <th>State Start Date</th> 
          <th>State End Date</th> 
          <th>Seconds</th> 
          <th>Minutes</th> 
          <th>Hours</th> 
         </tr> 
        </thead> 
        <tbody> 
         <tr ng-repeat="state in states"> 
          <td>{{state.display_name}}</td> 
          <td>{{state.state_desc}}</td> 
          <td>{{state.state_Type}}</td> 
          <td>{{state.adjustedClientStartState | date:'medium'}}</td> 
          <td>{{state.adjustedClientEndState | date:'medium'}}</td> 
          <td>{{state.timeInStateSeconds}}</td> 
          <td>{{state.timeInStateMinutes}}</td> 
          <td>{{state.timeInStateHour}}</td> 
         </tr> 

        </tbody> 
       </table> 
      </div> 
     </div> 

Может кто-то пожалуйста, пролить некоторый свет на то, что я здесь делаю неправильно?

+0

Я знаю данные, но я не знаю, угловатые. Вы пытаетесь инициализировать объект Datatable с параметрами в одном и том же элементе таблицы более одного раза. Это запрещено. Я бы посмотрел на код инициализации и выяснил, как это называется более одного раза, и измените это. –

+0

Хорошие мысли, конечно же, это состояние гонки, так как две функции часов выполняют вызовы, когда страница изначально отображается. Вы также можете нажать кнопку изменения часов достаточно быстро, чтобы перегрузить преобразование данных и заставить его так и произойти. Я закончил тем, что использовал немного взлома, чтобы обойти это. Привлечение трех переменных для определения того, обрабатывались ли данные, если инициализированы datatables и запускать отчет изначально при загрузке страницы. Благодаря! – phattyD

ответ

0

Ошибка была связана с тем, что вы пытались повторно инициализировать существующую базу данных. Что вам нужно включить это .withOption("destroy", true) в:

$scope.dtOptions = DTOptionsBuilder.newOptions() 

Это позволит решить эту проблему.

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