为啥没有使用 vuejs 将新行添加到 ag-grid?

Posted

技术标签:

【中文标题】为啥没有使用 vuejs 将新行添加到 ag-grid?【英文标题】:Why are new rows not being added to ag-grid using vuejs?为什么没有使用 vuejs 将新行添加到 ag-grid? 【发布时间】:2020-12-10 18:12:31 【问题描述】:

我在一个 vue.js 应用程序中有一个 ag-grid 组件,声明如下:

<ag-grid-vue :enable-sorting="false"
                                 :enable-filtering="false"
                                 :suppressDragLeaveHidesColumns="true"
                                 :rowData="category.policyDocuments"
                                 :gridOptions="policyGridOptions"
                                 @cellValueChanged="savePolicyRow"
                                 @grid-ready="onPolicyGridReady($event, category)"
                                 class="w-100"
                                 style="height: 200px">
</ag-grid-vue>

绑定到这个打字稿视图模型:

export class PolicyListViewModel 
    status: PolicyDashboardStatus;

    policyLists: DocumentWalletPolicyDocumentList[] = [];

    gridApi: GridApi | null = null;

    policyDocuments: DocumentWalletDocumentViewModel[] = [];

    constructor(status: PolicyDashboardStatus) 
        this.status = status;
    

    get shouldShow(): boolean 
        return this.policyDocuments.length > 0;
    

    updateDocuments(): void 
        this.policyDocuments = this.policyLists
            .map(list => list.policyDocuments)
            .reduce((a, b) => a.concat(b), []);
    

当我的页面首次显示时,我得到了正确的数据。当我用新数据调用updateDocuments 时,网格不会更新。我已经在 vue devtools 中验证了 rowData 道具正在更新。 ag-grid 文档建议组件应对更改做出反应。任何想法我做错了什么?

【问题讨论】:

使用 ag 网格,您可以使用 transactions 更新行数据。您不只是在上面的代码中直接设置它。 感谢@DigitalDrifter 的建议,但在这种情况下,我不会对数据客户端进行更改,而是从服务器刷新。文档说 “更新网格内数据的最简单方法是用一组新数据替换您提供的数据。这是通过更新 rowData 绑定属性(如果使用框架)或调用 api 来完成的.setRowData(newData).",参见:link。 我之前的评论是您作为解决方案提供的链接中的mentioned。 【参考方案1】:

啊哈。终于想通了,发在这里以防万一它帮助其他人。

看来我的问题是同时绑定gridOptionsrowData。当rowData 更改时,一切都工作正常除了。我假设这是因为网格选项有自己的 rowData 属性,而 ag-grid 包装器正在使用来自一个副本的数据并检测另一个副本的更改(或类似的东西)。

我用columnDefs 绑定替换了gridOptions 绑定(在这种情况下,我需要设置的唯一选项),一切都开始正常工作了。

【讨论】:

以上是关于为啥没有使用 vuejs 将新行添加到 ag-grid?的主要内容,如果未能解决你的问题,请参考以下文章

将 \n 替换为 vuejs 上的新行

为啥我不能引用将惯性js添加到我的项目的应用程序布局文件?

VueJS:使用 v-html 来 appendChild 不起作用,为啥?

Sendgrid不将文本发送到新行

将新行添加到 Google 表格时触发 Python

如何将包含现有行和新行的新列添加到表中?