Angular 5-Typescript:如何将选中列值总和存入外部变量
解决方案:将选中行数值总和存入外部变量 + Angular作用域资源推荐
一、修改现有代码实现总和统计
嘿,先给你解决第一个问题:要把选中行的数值总和存入函数外部变量,你需要先在组件类的类属性区域定义存储总和的变量,比如:
// 组件类中定义外部变量(函数外) totalVolume = 0; totalWeight = 0;
然后调整你的OnPropertyStorage函数,这里要注意两个关键:一是要区分复选框的勾选/取消状态(对应总和的加/减),二是修正你原来DOM元素获取的逻辑错误。修改后的代码如下:
OnPropertyStorage(event: Event): void { const checkboxes = document.getElementsByTagName('input'); for (let i = 0; i < checkboxes.length; i++) { const checkbox = checkboxes[i]; // 用箭头函数避免this指向混乱,确保能访问到组件类的totalVolume/weight checkbox.onchange = () => { const currentRow = checkbox.parentNode.parentNode; // 直接获取当前行的所有td列(你原来的tr获取逻辑有误) const columns = currentRow.getElementsByTagName('td'); if (columns.length >= 4) { // 把文本转成数值,避免字符串拼接 const volume = parseFloat(columns[2].textContent || '0'); const weight = parseFloat(columns[3].textContent || '0'); // 根据勾选状态更新总和 if (checkbox.checked) { this.totalVolume += volume; this.totalWeight += weight; } else { this.totalVolume -= volume; this.totalWeight -= weight; } // 验证输出 console.log('总容积:', this.totalVolume); console.log('总重量:', this.totalWeight); } }; } }
更符合Angular规范的实现(强烈推荐)
其实在Angular里不建议直接操作DOM,用数据绑定的方式会更优雅、更易维护:
- 把表格数据存在组件的数组里,给每个项加
isChecked标记 - 模板用
*ngFor渲染,复选框绑定[(ngModel)]="item.isChecked" - 用计算属性实时计算选中项总和
示例代码:
// 组件类 tableData = [ { id: 1, volume: 15, weight: 8, isChecked: false }, { id: 2, volume: 20, weight: 12, isChecked: false }, // 更多数据... ]; // 计算属性自动计算选中项总和 get selectedTotal() { return this.tableData .filter(item => item.isChecked) .reduce((total, item) => ({ volume: total.volume + item.volume, weight: total.weight + item.weight }), { volume: 0, weight: 0 }); }
模板部分:
<table> <tr *ngFor="let item of tableData"> <td><input type="checkbox" [(ngModel)]="item.isChecked"></td> <td>{{ item.id }}</td> <td>{{ item.volume }}</td> <td>{{ item.weight }}</td> </tr> </table> <!-- 实时展示总和 --> <div>总容积: {{ selectedTotal.volume }}</div> <div>总重量: {{ selectedTotal.weight }}</div>
这种方式完全遵循Angular的数据流,不用手动操作DOM,后续维护起来省心很多。
二、Angular变量作用域优质内容推荐
这里给你推荐几个值得深挖的方向(不用跳转外部网站,直接看官方文档或社区总结的内容即可):
- 官方文档:组件与模板交互:这部分详细讲解了组件类属性在模板中的访问规则、模板变量的作用域边界、
this在组件方法中的指向问题,是理解Angular作用域的核心基础。 - 组件与服务的作用域隔离:可以看Angular依赖注入相关内容,了解组件实例化时的作用域隔离逻辑,以及服务的单例/多实例模式如何影响变量的共享范围。
- RxJS订阅中的作用坑点:很多新手会在Observable订阅里遇到
this指向错误,相关内容会讲解用箭头函数、bind方法或async管道避免这类问题的技巧。 - 模板引用变量与ViewChild:这部分内容会帮你搞清楚模板中定义的变量如何在组件类中访问,以及它们的作用域限制。
内容的提问来源于stack exchange,提问作者Dimitris
相关产品推荐
相关产品推荐

