Angular Grid ag-grid columnDefs Динамически изменяются

У меня проблема с динамическим изменением columnDefs. Вот мои gridOptions:

$scope.gridOptions = {
        columnDefs: [],
        enableFilter: true,
        rowData: null,
        rowSelection: 'multiple',
        rowDeselection: true
    };

и когда я возвращаю данные с сервера:

$scope.customColumns = [];

$http.post('/Home/GetProducts', { tableName: 'TABLE_PRODUCT' }).success(function (data) {
    angular.forEach(data.Columns, function (c) {
        $scope.customColumns.push(
            {
                headerName: c.Name,
                field: c.Value,
                width: c.Width
            }
        );
    });

    $scope.gridOptions.columnDefs = $scope.customColumns;

    $scope.gridOptions.rowData = data.Products;
    $scope.gridOptions.api.onNewRows();
}).error(function () {

});

Примечание: здесь c - объект столбца, который исходит от сервера.

При динамическом создании столбцов и присваивании ему $scope.gridOptions.columnDefs существует пустая сетка, но массив $scope.customColumns заполняется с помощью прав генерируемых объектов столбца. Пожалуйста, помогите мне, эта ошибка, или я делаю что-то неправильно?

Ответ 1

В ag-grid столбцы в gridOptions используются один раз при инициализации сетки. Если вы измените столбцы после инициализации, вы должны указать сетку. Это делается путем вызова gridOptions.api.setColumnDefs()

Подробности этого метода API приведены в документации ag-grid здесь.

Ответ 2

Я думаю, что это уже исправлено.

Я могу сделать что-то подобное сейчас с последними угловыми и ag-grid. Обратите внимание, что здесь я использую ngxs, однако это все еще указывает на возможность получить асинхронные определения столбцов, поскольку я получаю определения столбцов на основе имен свойств данных, которые возвращаются из серверной части в этом случае rowData.

Во-первых, я получаю данные строки из внутреннего API. Затем при получении я выполняю операции в столбце "Выбрать для", которые сопоставляют заголовки возвращаемых данных со свойствами.

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

<ag-grid-angular 
    style="width: 100%; height: 500px;" 
    class="ag-theme-balham"
    [rowData]="rowData$ | async" 
    [columnDefs]="columnsDefs$ | async"
    >
</ag-grid-angular>


export class AgGridComponent {
    @Select(MyState.getColumnDefs) public columnsDefs$!: Observable<ReadonlyArray<any>>;

    @Select(MyState.getRowData) public rowData$!: Observable<ReadonlyArray<any>>;
}