AG-Grid:由于只读而无法更新Grid中的字段

时间:2018-12-01 15:03:45

标签: angular ag-grid

我正在尝试更新ag-grid中的一个字段,并且该字段不断出现错误TypeError:无法分配为只读对象'[object Object]'的属性'quantity'。

它允许我编辑单元格,但是当我尝试更新时,会出现此错误。

我正在使用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 :(得分:1)

从商店获取并在网格中使用的对象是不可变的。

默认情况下,当您使网格中的列可编辑时,它将尝试直接更新支持对象,而这正是您所看到的问题-网格试图使不可变对象发生变化。

解决方案是向网格列的定义添加“ valueSetter”属性。此属性的值应该是一个将接收新值,然后使用该新值来更新商店的函数。

设置了此属性后,ag-grid将不会尝试直接更新对象。

相关问题