计算属性通过响应式依赖自动重算实现高效动态汇总,支持单列求和、多维度分组统计及联动筛选条件下的实时更新,且自带缓存机制无需额外防抖。

计算属性本身不直接操作 DOM 或发送请求,但它能高效响应数据变化,自动更新汇总结果——这是实现动态表格行汇总的核心优势。
用 computed 实时汇总某列数值
当表格数据(如 tableData)是响应式数组,且每行含数字字段(如 amount),可直接在 Vue 组件中定义计算属性:
-
写法示例:
computed: {<br> totalAmount() {<br> return this.tableData.reduce((sum, row) => sum + (Number(row.amount) || 0), 0);<br> }<br>} - 注意对空值、字符串数字做安全转换(Number() + || 0),避免 NaN
- 只要 tableData 或其中任一行的 amount 变化,totalAmount 自动重算
多维度汇总:按状态分组统计
若需同时展示「待审核」「已通过」「已驳回」各多少条,以及对应金额总和,可用对象形式返回结构化汇总:
-
一次遍历完成多个指标:
computed: {<br> statusSummary() {<br> return this.tableData.reduce((acc, row) => {<br> const status = row.status || 'unknown';<br> acc.count[status] = (acc.count[status] || 0) + 1;<br> acc.amount[status] = (acc.amount[status] || 0) + (Number(row.amount) || 0);<br> return acc;<br> }, { count: {}, amount: {} });<br> }<br>} - 模板中可直接用 {{ statusSummary.count.pending }} 或 {{ statusSummary.amount.approved.toFixed(2) }}
- 比写多个独立计算属性更省内存、更易维护
联动筛选与汇总:带条件的动态统计
当表格支持搜索、日期范围或下拉筛选时,汇总应只基于当前可见/匹配的数据:
- 先定义一个响应式的 filteredData 计算属性(基于 tableData 和筛选条件)
- 所有汇总逻辑都基于 filteredData,而非原始 tableData
- 例如:
computed: {<br> filteredData() {<br> return this.tableData.filter(row =><br> row.name.includes(this.searchKey) &&<br> row.date >= this.startDate<br> );<br> },<br> filteredTotal() {<br> return this.filteredData.reduce(...); // 复用上面逻辑<br> }<br>}
性能提醒:大数据量时加防抖或节流?不需要
计算属性自带缓存机制,仅在依赖项变化时才重新求值。即使表格有 5000 行,只要没新增、删除、修改数据,汇总值不会重复计算。真正影响性能的是频繁触发响应式更新(如每输入一个字就 push 新行),而不是计算属性本身。重点应放在合理控制数据变更频率,而非给 computed 加防抖。

















