You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js中如何获取ag-grid服务端行模型的总行数?

解决方法

有两种简单方式可以让你获取服务端返回的总行数并更新到组件的totalRows中:


方法一:将数据源创建函数移至组件内部

直接把createServerSideDatasource放到组件的methods中,这样函数内部就能通过组件实例访问data里的totalRows:

<template>
    <p>{{ totalRows }}</p>
    <ag-grid
        rowModelType="serverSide"
        ...
    >
    </ag-grid>
</template>

<script>
import { AgGridVue } from 'ag-grid-vue3'
import 'ag-grid-enterprise'
import 'ag-grid-community/styles/ag-grid.css'

export default {
    name: 'list',
    components: {
        AgGridVue
    },  
    data() {
        return {
            gridApi: null,
            totalRows: 0,
        }
    },
    
    methods: { // 注意这里是`methods: { ... }`而非`methods()`
        onGridReady(params) {
            this.gridApi = params.api
            this.gridApi.setGridOption("serverSideDatasource", this.createServerSideDatasource())
        },
        createServerSideDatasource() {
            const vm = this // 保存组件实例,因为getRows回调的this不指向组件
            return {
                getRows: function(params) {
                    let sortColumn = null
                    let sortDirection = null
                    if (params.request.sortModel.length > 0) {
                        sortColumn = params.request.sortModel[0].colId
                        sortDirection = params.request.sortModel[0].sort
                    }

                    User.list(params.request.startRow, params.request.endRow, sortColumn, sortDirection, window.searchText).then((response) => {
                        if (response.data.success) {
                        
                            params.success({
                                rowData: response.data.rows,
                                rowCount: response.data.lastRow,
                            })

                            vm.totalRows = response.data.lastRow // 直接更新组件的totalRows
                            
                        }
                        else {
                            params.fail()
                        }
                    })
                },
            }
        }
    },
}
</script>

方法二:给外部函数传递组件实例

如果想保留createServerSideDatasource作为外部函数,只需把组件实例作为参数传入,就能通过实例修改totalRows:

<template>
    <p>{{ totalRows }}</p>
    <ag-grid
        rowModelType="serverSide"
        ...
    >
    </ag-grid>
</template>

<script>
import { AgGridVue } from 'ag-grid-vue3'
import 'ag-grid-enterprise'
import 'ag-grid-community/styles/ag-grid.css'

export default {
    name: 'list',
    components: {
        AgGridVue
    },  
    data() {
        return {
            gridApi: null,
            totalRows: 0,
        }
    },
    
    methods: {
        onGridReady(params) {
            this.gridApi = params.api
            // 将当前组件实例传给外部函数
            this.gridApi.setGridOption("serverSideDatasource", createServerSideDatasource(this))
        }
    },
}

// 接收组件实例作为参数
function createServerSideDatasource(vm) {
  return {
    getRows: function(params) {
      let sortColumn = null
      let sortDirection = null
      if (params.request.sortModel.length > 0) {
        sortColumn = params.request.sortModel[0].colId
        sortDirection = params.request.sortModel[0].sort
      }

      User.list(params.request.startRow, params.request.endRow, sortColumn, sortDirection, window.searchText).then((response) => {
        if (response.data.success) {
        
          params.success({
            rowData: response.data.rows,
            rowCount: response.data.lastRow,
          })

          vm.totalRows = response.data.lastRow // 通过传入的实例更新totalRows
          
        }
        else {
          params.fail()
        }
      })
    },
  }
}
</script>

两种方法都能实现将服务端返回的总行数同步到组件的totalRows中,页面上的{{ totalRows }}会自动更新显示。

内容的提问来源于stack exchange,提问作者Liiisey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 11:07:42