Angular Datables - получить значения из datatables - PullRequest
0 голосов
/ 14 сентября 2018

Я использую Angular 5 и Angular Datatables

OK Это фрагмент кода с объяснениями, потому что он сложный.

Я получаю данные со следующей структурой:

Массив следующих предметов

- count
- data
----- datarows
----- footerRow
----- headerRow
- service

пример:

enter image description here

Цель состоит в том, чтобы отобразить данные в различных таблицах данных, подобных этой (один элемент в таблице данных):

enter image description here

Данные хранятся в переменной listServices: listServices: Stats [] = []; где Stats составлен так:

export interface Stats {
  'data': DataTable [];
  'service': string;
  'count': number;
}
export interface DataTable {
  headerRow: string[];
  footerRow: string[];
  dataRows: string[][];
}

Работает, как вы видите.

Вот мой HTML:

  <div class="col-md-6" *ngFor="let services of listServices">
    <div class="card" *ngFor="let dataTable of services.data">
      <div class="card-header card-header-icon" data-background-color="green">
        {{services.count}}
      </div>
      <div class="card-content">
        <h4 class="card-title">
          {{services.service}}
        </h4>
        <div class="material-datatables table-responsive">
          <table datatable [dtOptions]="dtOptions" class="table table-striped table-no-bordered table-hover" cellspacing="0" width="100%" style="width:100%">
            <thead>
            <tr>
              <th style="width: 1%">
                <mat-checkbox (change)="$event ? masterToggle(dataTable.dataRows) : null"
                                [checked]="selection.hasValue() && isAllSelected(dataTable.dataRows.length)"
                                (click)="test()">
                </mat-checkbox>
              </th>
              <th>{{ dataTable.headerRow[1] }}</th>
              <th>{{ dataTable.headerRow[2] }}</th>
              <th>{{ dataTable.headerRow[3] }}</th>
              <th class="disabled-sorting text-right">Action</th>
            </tr>
            </thead>
            <tfoot>
            <tr>
              <th>Sélection</th>
              <th>{{ dataTable.footerRow[1] }}</th>
              <th>{{ dataTable.footerRow[2] }}</th>
              <th>{{ dataTable.footerRow[3] }}</th>
              <th class="text-right">Action</th>
            </tr>
            </tfoot>
            <tbody>
            <tr *ngFor="let row of dataTable.dataRows">
              <td>
                <mat-checkbox (click)="$event.stopPropagation()"
                                 (change)="$event ? selection.toggle(row) : null"
                                 [checked]="selection.isSelected(row)">
                </mat-checkbox>
              </td>
              <!--<td>{{row[0]}}</td>-->
              <td>{{row[1]}}</td>
              <td>{{row[2]}}</td>
              <td>{{row[3]}}</td>
              <td class="text-right">
                <button (click)="openIndex(row)" class="btn btn-simple btn-info btn-icon"  matTooltip="Indexer" [matTooltipPosition]="'left'">
                  <i class="material-icons">assignment</i>
                </button>
                <button (click)="onSubmitDel(row)" class="btn btn-simple btn-danger btn-icon"  matTooltip="Supprimer" [matTooltipPosition]="'right'">
                  <i class="material-icons">delete</i>
                </button>
              </td>
            </tr>
            </tbody>
          </table>
        </div>
      </div>
    </div>
  </div>

Итак, для управления всеми моими таблицами данных у меня есть одна конфигурация:

ngOnInit() {
    const that = this;
    console.log('DashboardComponent - ngOnInit()');
    this.dtOptions = {
      pagingType: 'full_numbers',
      lengthMenu: [[5, 10, 25, 50, -1], [5, 10, 25, 50, 'Tous']],
      responsive: true,
      language: {
        lengthMenu: '    Afficher _MENU_ documents par page',
        zeroRecords: 'Aucune tâche disponible',
        info: 'Page _PAGE_ sur _PAGES_',
        infoEmpty: 'Aucun enre disponible',
        infoFiltered: ' (filtré(s) sur _MAX_ enregistrements)',
        paginate: {
          first:      '<<',
          last:       '>>',
          next:       '>',
          previous:   '<'
        },
        search: '_INPUT_',
        searchPlaceholder: 'Recherche',
      },
      stateSave: true,
      order: [[1, 'desc']],
      // Declare the use of the extension in the dom parameter
      dom: 'Blfrtip',
      select: true,
      columnDefs: [
        { targets: 3 ,
          visible: false,
          searchable: false
        }
      ],
      // Configure the buttons
      buttons: [
        {
          text: '<i class="material-icons">delete</i>',
          className: 'btn btn-danger btn-round',
          action: function (e, dt, node, config) {
            that.filterLists(dt);
          }
        },
        {
          text: 'Validation',
          className: 'btn btn-primary btn-round',
          // className: 'table-button button btn btn-primary',
          action: function (e, dt, node, config) {
            that.filterLists(dt);
            that.indexAllDoc(that.finalEltList);
          }
        },
      ]
    };
  }

но у меня 2 проблемы:

во-первых, я не могу скрыть третий столбец "Id" (проблема синхронизации с загрузкой данных ??)

второй: У меня есть много переменных, таких как «service», «datatable» или «datarows», как вы можете видеть в моем HTML-файле, и я не знаю, как получить их значения, когда я нажимаю кнопку «Проверка». Я знаю только, как извлечь значения таблицы «Дата», «Описание» и «Идентификатор» с помощью dt.buttons.exportData (). Body

Обе проблемы связаны: я должен получить абсолютно «id» значение, чтобы оно не отображалось на экране, но либо «visible = false» не работает (но «доступно для поиска», да), либо, если я решу удалить эту информацию из моего HTML я не могу найти, как получить значение «datarows», которое содержит все «id» ......

...