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

如何避免ngbTooltip中重复书写FormGroup控件取值的冗余代码

优化方案

以下是3种不同场景下的优化方式,可按需选择:

方案1:直接简化表达式(无需修改其他代码,改动最小)

你写的三元表达式本质是「前者存在就取前者,否则取后者」的逻辑,直接用逻辑运算符就能实现,省去重复取值:

<div class="svg-class">
    <svg [id]="params.id"
    [ngbTooltip]="allTrans[params.formGroup.controls[params.fieldName].value] ?? params.formGroup.controls[params.fieldName].value"
    container="body"
    triggers="manual">
    </svg>
</div>

这里用ES2020的空值合并运算符??替代||,可以避免0、空字符串等合法假值被误过滤的问题,如果项目不支持高版本ES语法,替换成||也可以正常使用。

方案2:模板内声明临时变量(完全消除重复取值)

如果要彻底只写一次取值逻辑,可以用Angular的变量声明语法,不会额外生成DOM节点:

<div class="svg-class">
    <ng-container *ngIf="true; let fieldValue = params.formGroup.controls[params.fieldName].value">
        <svg [id]="params.id"
        [ngbTooltip]="allTrans[fieldValue] ?? fieldValue"
        container="body"
        triggers="manual">
        </svg>
    </ng-container>
</div>

这里用*ngIf="true"是为了避免取值为假值时,ng-container内部的内容不渲染的问题。

方案3:封装为组件方法(最易维护,适合复杂逻辑)

如果后续tooltip的展示逻辑还有扩展需求,直接把逻辑抽到组件.ts中:

// 对应组件的ts文件
getFieldTooltip(params: any): string {
  const fieldValue = params.formGroup.controls[params.fieldName].value;
  return this.allTrans[fieldValue] ?? fieldValue;
}

模板直接调用方法即可,逻辑清晰易修改:

<div class="svg-class">
    <svg [id]="params.id"
    [ngbTooltip]="getFieldTooltip(params)"
    container="body"
    triggers="manual">
    </svg>
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 12:21:03