AG-Grid: невозможно обновить поле в Grid, так как оно доступно только для чтения - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь обновить поле в ag-grid, и оно продолжает возвращаться с ОШИБКОЙ. TypeError: Невозможно назначить только для чтения свойство 'количество' объекта '[объект]].

Это позволяет мнечтобы изменить ячейку, но когда я пытаюсь обновить, она появляется с этой ошибкой.

Я использую наблюдаемое из хранилища ngrx, чтобы заполнить rowData, как показано ниже:

this.order$.subscribe(order => {
            this.order = { ...order, products: [...order.products] };
        });

У меня естьпроверил вышеупомянутое, и я могу обновить этот объект, сказав this.orders.products = [], который говорит мне, что он больше не является неизменным.

 <mi-ag-grid [data]="order.products" [columnDefs]="columnDefs" [suppressClickEdit]="false"></mi-ag-grid>

columnDefs = [
        {
            headerName: 'Code',
            field: 'code',
            width: 150
        },
        {
            headerName: 'Name',
            field: 'name',
            width: 200,
            editable: true
        },
        {
            headerName: 'Quantity',
            field: 'quantity',
            width: 150,
            editable: true
        }
    ];

Затем я попробовал предложение от @GreyBeardedGeek и попытался установить значениес параметром valueSetter, как показано ниже, но все равно с той же ошибкой.

,
    {
        headerName: 'Quantity',
        width: 150,
        editable: true,
        field: 'quantity',
        valueSetter: quantityValueSetter
    },


function quantityValueSetter(params): any {
console.log(params);
params.data.quantity = params.newValue;

}

1 Ответ

0 голосов
/ 01 декабря 2018

Объект, который вы получаете из хранилища и используете в сетке, является неизменным.

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

Решение состоит в том, чтобы добавить свойство "valueSetter" в определение столбца сетки.Значением этого свойства должна быть функция, которая получит новое значение, а затем использует это новое значение для обновления хранилища.

Если у вас установлено это свойство, ag-grid не будет пытаться обновить объектнепосредственно.

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