单元格编辑事件后保存网格数据,有时数组为空

Saving grid data after cell editing event, sometimes array is empty

我在我的项目中使用 ag-grid。编辑单元格后,我试图将 rowData 保存到后端。它在大部分时间都有效,但有时,我最终会保留一个序列化的空数组,原因目前我无法理解。

现在,我正在使用 onCellEditingStopped 事件触发保存到数据库。我的组件中的一些代码:

this.plansGridOptions.onCellEditingStopped = this.cellEditingStopped;

cellEditingStopped(params: CellEditingStoppedEvent) { 

    let context = <ImportSessionComponent>params.context;
    context.saveSession().subscribe(r => { });

}

saveSession(): Observable<any> {
    //I'm simply serializing the row data array, and storing that value
    //But sometimes, plansRowData is empty at this point.
    this.importForm.get("uploadItemsSerialized").setValue(JSON.stringify(this.plansRowData));
    return this.importService.saveSession(this.importForm);
}


saveSession(sessionForm: FormGroup): Observable<any> {
    //some conversion from string to number so viewmodel binding works in the backend
    const value = {
        ...sessionForm.value, importType: +sessionForm.get("importType").value, environment: 
        +sessionForm.get("environment").value,
        id: +sessionForm.get("id").value, version: +sessionForm.get("version").value, stepIndex: 
        sessionForm.get("currentStep").value
    };
    return this.http.post<any>("/import/save", value);
}

这是网格的模板标记:

<ag-grid-angular #planGrid style="width: 100%; height: 475px;"
    class="ag-theme-balham-dark"
    [rowData]="plansRowData"
    [gridOptions]="plansGridOptions"
    [columnDefs]="plansRowConfig">
</ag-grid-angular>

似乎网格组件和我的组件数组之间的绑定并不总是固定的(即:我正在使用的事件是在网格更新 plansRowData 数组之前触发的?)我应该使用不同的事件来触发保存?是什么导致了这个问题?

也许切换到 cellValueChanged 会有帮助?这似乎是明智的,因为从理论上讲,一旦更改了值,它就应该被触发——在处理数据之前消除任何未更新的数据问题。可能比 onCellEditingStopped 更合适(不确定钩子的各种生命周期顺序)。

我知道 AG Grid 在计时方面做了一些有趣的事情 - 不止一个地方我有奇怪的 setTimeout 函数来触发某些东西(通常调整大小),实际上它有效。

API 参考