th-table 中 基于双字段计算的表格列展示方案

简介: 本文介绍在 Angular 的 `th-table` 中,如何通过两个字段计算展示新列(如“总价”)。涵盖四种方法:模板直接计算、数据预处理、自定义管道及单元格渲染,并分析适用场景与性能建议,助你写出高效、可维护的表格代码。

@TOC

场景说明

在使用 th-table(通常指基于 Angular 的 ng-zorro-antd 或类似 UI 库中的表格组件)时,如果某一列的值需要通过两个字段(key)计算得出,你可以通过以下几种方式实现展示:

假设你的数据结构如下:

list = [
  {
    name: '张三', price: 100, quantity: 5 },
  {
    name: '李四', price: 80,  quantity: 3 }
];

你想在表格中展示一列 “总价” = price × quantity

方法一:在模板中直接计算(推荐用于简单逻辑)

HTML 模板(Angular + ng-zorro-antd 示例)

<nz-table #basicTable [nzData]="list">
  <thead>
    <tr>
      <th>姓名</th>
      <th>单价</th>
      <th>数量</th>
      <th>总价</th>
    </tr>
  </thead>
  <tbody>
    <tr *ngFor="let item of basicTable.data">
      <td>{
  { item.name }}</td>
      <td>{
  { item.price }}</td>
      <td>{
  { item.quantity }}</td>
      <td>{
  { item.price * item.quantity }}</td> <!-- 直接计算 -->
    </tr>
  </tbody>
</nz-table>

优点:简单直观,适合轻量计算。
注意:避免在模板中写复杂逻辑(如函数调用、循环),会影响性能和可读性。

方法二:在数据源中预处理(推荐用于复杂或复用逻辑)

在 TypeScript 中提前计算好新字段

this.list = originalData.map(item => ({
   
  ...item,
  total: item.price * item.quantity // 新增 total 字段
}));

模板中直接使用

<td>{
  { item.total }}</td>

优点

  • 模板干净;
  • 支持排序、搜索(如果表格支持);
  • 逻辑集中,便于测试和维护。

方法三:使用自定义管道(Pipe)——适用于可复用的格式化逻辑

创建管道

@Pipe({
    name: 'multiply' })
export class MultiplyPipe implements PipeTransform {
   
  transform(a: number, b: number): number {
   
    return a * b;
  }
}

模板中使用

<td>{
  { item.price | multiply: item.quantity }}</td>

适用场景:乘法、百分比、货币格式等通用计算。
不推荐:仅用于当前表格的特定业务逻辑(过度设计)。

方法四:使用 nzCustomColumn 或 render 函数(高级用法)

如果你使用的是支持 自定义渲染 的表格(如 Ant Design Vue / React),但在 Angular 的 nz-table 中,也可以通过 *nzCell 自定义单元格:

<td *nzCell="let item">
  <span class="highlight">{
  { item.price * item.quantity }}</span>
</td>

或者结合方法:

<td>{
  { getTotal(item) }}</td>

并在组件中定义方法:

getTotal(item: any): number {
   
  return item.price * item.quantity;
}

注意:在 Angular 中,模板中调用方法会频繁触发变更检测,可能导致性能问题。仅建议用于简单、无副作用的计算,或配合 OnPush 策略使用。

举一反三: 避免的反模式

<!-- 不推荐:在模板中调用复杂函数 -->
<td>{
  { calculateTotal(item) }}</td>
// 每次变更检测都会执行,影响性能
calculateTotal(item) {
   
  // 复杂逻辑...
  return item.a * item.b + someExpensiveOperation();
}

总结

场景 推荐方案
简单计算(如 a + b, a * b) 模板内直接计算 { { a * b }}
复杂/可复用逻辑 数据预处理(.map() 添加字段)
通用格式化(如货币、百分比) 自定义 Pipe
需要高亮、图标等富 UI 使用 *nzCell 自定义单元格

示例完整代码(Angular + ng-zorro)

// component.ts
list = [
  {
    name: '张三', price: 100, quantity: 5 },
  {
    name: '李四', price: 80,  quantity: 3 }
].map(item => ({
   
  ...item,
  total: item.price * item.quantity
}));
<!-- template.html -->
<nz-table [nzData]="list">
  <thead>
    <tr><th>姓名</th><th>单价</th><th>数量</th><th>总价</th></tr>
  </thead>
  <tbody>
    <tr *ngFor="let item of list">
      <td>{
  { item.name }}</td>
      <td>{
  { item.price }}</td>
      <td>{
  { item.quantity }}</td>
      <td>{
  { item.total }}</td>
    </tr>
  </tbody>
</nz-table>
相关文章
|
26天前
|
SQL 安全 关系型数据库
深入理解 MySQL 权限撤销(REVOKE)机制:从语法到安全实践
本文深入解析MySQL中REVOKE语句的语法、权限作用域、用户标识规范及安全实践,涵盖常见错误与最佳策略,助力精准撤销用户权限,提升数据库安全性与合规性。
91 14
|
26天前
|
NoSQL Shell MongoDB
MongoDB 插入操作机制详解:insert() 与 nInserted 的行为剖析
本文通过分析一段MongoDB循环插入脚本,揭示`insert()`方法每次返回`nInserted: 1`的本质原因,对比`insertMany()`的批量插入优势,强调单次操作与整体意图的区别,帮助开发者理解写入机制、提升性能与代码可控性。
80 13
|
21天前
|
缓存 运维 监控
一次内存诊断,让资源利用率提升 40%:揭秘隐式内存治理
阿里云云监控 2.0 推出 SysOM 底层操作系统诊断能力,基于 eBPF + BTF 协同分析,无需侵入业务,即可一键完成从物理页到文件路径、再到容器进程的全栈内存归因,让“黑盒内存”无所遁形。
470 73
|
27天前
|
监控 Java 开发者
Spring Boot 核心原理解析与实践(含代码示例)
Spring Boot基于“约定优于配置”理念,通过自动配置、Starter依赖和内嵌服务器,简化Spring应用的搭建与开发。支持快速集成Web、数据访问、安全等模块,并提供Actuator监控、分布式事务等生产级特性,助力高效构建微服务系统。(238字)
502 17
|
16天前
|
存储 缓存 数据挖掘
阿里云服务器租用价格,特价38元、99元、199元云服务器与最新活动价格参考
截止目前阿里云服务器价格最便宜主要有三款,轻量应用服务器2核2G峰值200M带宽38元1年;云服务器经济型e实例2核2G3M带宽99元1年;云服务器通用算力型u1实例2核4G5M带宽199元1年。除此之外,还有4核16G10M带宽只要89元/1个月、210元/3个月,8核32G10M带宽只要160元/1个月、480元/3个月。本文为大家分享目前阿里云的各个特价云服务器及活动价格情况,以供参考和选择。
246 17
|
22天前
|
人工智能 自然语言处理 数据可视化
阿里云万小智AI建站是什么?产品架构、优势、功能与收费标准参考
万小智AI建站是阿里云面向企业及个人用户提供的一款AI驱动的自助建站产品,无需编程基础,通过对话式交互、可视化拖拽操作和AI辅助内容生成,即可快速搭建响应式网站。用户购买后无需单独配置服务器,只需注册域名并完成备案(如部署在中国内地),即可上线网站。
210 20
|
27天前
|
缓存 监控 Java
拆解一个真实电商项目:微服务架构中的服务治理与性能优化
本课程以母婴电商重构为背景,系统讲解微服务架构落地实践。涵盖服务拆分、Nacos治理、分布式缓存、事务、限流熔断等核心问题,结合Spring Cloud Alibaba技术栈,提供完整项目代码与40小时实战视频,助力开发者掌握从单体到分布式架构的演进能力。
116 14
|
1月前
|
SQL 分布式计算 DataWorks
【跨国数仓迁移最佳实践7】基于 MaxCompute 多租的大数据平台架构
本系列文章将围绕东南亚头部科技集团的真实迁移历程展开,逐步拆解 BigQuery 迁移至 MaxCompute 过程中的关键挑战与技术创新。本篇为第七篇,基于MaxCompute 多租的大数据平台架构。 注:客户背景为东南亚头部科技集团,文中用 GoTerra 表示。
217 27
|
22天前
|
人工智能 自然语言处理 搜索推荐
深度解读:Geo优化“两大核心+四轮驱动”方法论的落地执行细节
在AI驱动的数字营销新时代,传统SEO面临重构。于磊老师首创“两大核心+四轮驱动”Geo优化方法论,以人性化内容与交叉验证构建可信生态,融合EEAT原则、结构化内容、精准关键词及权威引用,助力企业实现高效获客与可持续增长。
281 16
|
1天前
|
弹性计算 应用服务中间件
阿里云服务器租用2年或3年有没有优惠?价格查询方法与部分实例价格参考
阿里云服务器购买2年或3年有没有优惠?当时是有的,例如现在通过活动选择经济型e实例2核4G2年的活动价格为1128.00元起,选择3年则是1499.40元起,需要配置更高一点可以选择2核8G、4核8G和4核16G。本文为大家介绍现在通过云服务器产品页选购和通过活动选购2年或3年云服务器主要有哪些优惠,以供大家参考。