Angular 7 DataTable: данные недоступны после щелчка по заголовку таблицы

#angular #datatable

#angular #datatable

Вопрос:

Я работаю над получением списка валют в таблице данных после ее настройки в соответствии с https://l-lin.github.io/angular-datatables/#/basic/angular-way (угловой способ).

После реализации, щелкнув ячейку заголовка таблицы, datatable очищает данные, зная, что они упорядочивают данные правильно, если строки жестко закодированы.

ниже приведен мой код:

HTML:

 <table
  datatable
  [dtOptions]="dtOptions"
  [dtTrigger]="dtTrigger"
  class="table-basic table">
  <thead>
    <tr>
      <th>Col 1</th>
      <th>Col 2</th>
      <th>Col 3</th>
    </tr>
  </thead>
  <tbody>
    <tr *ngFor="let currency of currencies">
      <td>{{ currency.Code}}</td>
      <td>{{ currency.Name}}</td>
      <td>{{ currency.NativeName }}</td>
    </tr>
  </tbody>
</table>
  

Компонент

 export class CoverageComponent implements AfterViewInit, OnDestroy, OnInit         {

  @ViewChild(DataTableDirective)
  dtElement: DataTableDirective;

  dtTrigger: Subject<any> = new Subject();
  dtOptions: DataTables.Settings = {};

  currencies: Currency[] = [];

  ngOnInit(): void {
    this.dtOptions = {
        dom : ''
    };

          this.currencyService.getCurrencies().subscribe(
            (data: Currency[]) => {
              this.currency = data.slice(0, 5);

              // this.dtTrigger.next();
                  },
            (err : any) => {
              console.log("---> error", err);
            }
          );
        }

  ngAfterViewInit(): void {
      this.dtTrigger.next();
    }

    ngOnDestroy(): void {
      // Do not forget to unsubscribe the event
      this.dtTrigger.unsubscribe();
    }

    rerender(): void {
        this.dtElement.dtInstance.then((dtInstance: DataTables.Api) => {
        // Destroy the table first
        dtInstance.destroy();
        // Call the dtTrigger to rerender again
        this.dtTrigger.next();
      });
  }
  

Вопрос 1- как исправить проблему упорядочения столбцов в подходе привязки angular * ngFor
Вопрос 2 — есть ли способ реализовать пользовательский текст для упорядочения строк. я попробовал подход jquery с данными, добавив атрибуты данных (поиск и порядок)

  attr.data-search="{{currency.fullname}}"
 attr.data-order="{{currency.fullname}}"
  

Комментарии:

1. пожалуйста, приведите пример stackblitz, было бы намного проще помочь.

2. @AmitBaranes спасибо, я исправил проблему, удалив строку ngAfterViewInit() и раскомментировав это. dtTrigger.next(); после подписки на http-запрос.

Ответ №1:

Исправлено путем удаления

 ngAfterViewInit(): void {
  this.dtTrigger.next();
}
  

и раскомментирование

 // this.dtTrigger.next();
  

после подписки на http-запрос