Как динамически воссоздавать столбцы datagrid во время выполнения?

#angular #vmware-clarity

#angular #vmware-ясность

Вопрос:

Я вызываю службу API, которая возвращает массив JSON. У меня также есть код во внешнем интерфейсе, который составляет список столбцов или полей на основе JSON. Этот список столбцов не является фиксированным списком и может отличаться в зависимости от содержимого JSON. Итак, мне нужно динамически воссоздавать столбцы таблицы данных во время выполнения.

Это работает при использовании директивы *ngFor и переборе массива столбцов, который предварительно определен или инициализирован в коде, но мне нужно изменить список столбцов во время выполнения.

Пример:

 <clr-dg-column *ngFor="let field of fields" [clrDgField]="field.name">
    {{ field.text }}
</clr-dg-column>
  
 let fields = [ { name: "id", text: "Id" }, { name: "name", text: "Name" }];

changeFields() {
    this.fields = [ { name: "userId", text: "User Id" }, { name: "desc", text: "Description" }];
}
  

При вызове changeFields() функции я ожидал, что столбцы datagrid будут изменены на новый список столбцов. Но проблема в том, что он не выполняет повторную визуализацию столбцов.

В примере ниже показано первое изображение с начальными столбцами таблицы данных, на втором изображении показаны пустые столбцы, измененные во время выполнения

Перед изменением переменных fields:

Перед изменением столбцов

После изменения полей во время выполнения:

После изменения столбцов

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

1. Есть ли у вас простое воспроизведение того, что вы делаете, чтобы нам было проще сортировать запрос? У нас есть начало в stackblitz.com/@clr-team

2. @JeremyWilken Извините, я просто неправильно использовал datagrid. Теперь это работает идеально. Вот над чем я сейчас работаю. Чего я пытаюсь достичь, так это динамической генерации столбцов на основе ключей первой записи в массиве JSON. Вы можете проверить этот StackBlitz, если вам это интересно: stackblitz.com/edit/clarity-light-theme-v1-0-oadj7e