《Angular 中优雅地处理枚举值:Map + *ngIf as 替代多次 *ngIf》

首先看看多次*ngif:

Map数据

typescript 复制代码
export const stautsMap: {[key: number]: string} = {
  1: '是',
  0: '否',
  2: '未知',
};

Html页面需要多次*ngif判断多行结果

html 复制代码
<nz-tag *ngif="data?.realFiling == 1" nzColor="blue">{{statusMap[data?.realFiling]}}</nz-tag>
<nz-tag *ngif="data?.realFiling == 0" nzColor="red">{{statusMap[data?.realFiling]}}</nz-tag>
<nz-tag *ngif="data?.realFiling == 2">{{statusMap[data?.realFiling]}}</nz-tag>

优化之后:

Map数据

typescript 复制代码
export const statusMap: {[key: number]: any} = {
  1: {value: '是', color: 'blue'},
  0: {value: '否', color: 'red'},
  2: {value: '未知', color: null},
};

Html页面

html 复制代码
<ng-container *ngIf="statusMap[data?.realFiling] as realFiling">
	<nz-tag [nzColor]="realFiling?.color">{{realFiling?.value}}</nz-tag>
</ng-container>

关键点:

*ngIf as 的作用:判断 + 重命名

ng-container 不生成多余 DOM(对比 Vue 的 )

Map数据可以定义更多的内容,例如:

typescript 复制代码
statusMap = {
  1: { value: '是', color: 'blue', icon: 'check-circle', bgColor: '#e6f7ff' }
};

最终目的:

节省页面多行*ngif判断代码

*ngif as可以避免多次statusMapdata?.realFiling取值

相关推荐
栉甜14 分钟前
Vue2学习内容(上)
前端·javascript·vue.js·学习
shmily麻瓜小菜鸡2 小时前
TypeScript 知识点补充(第三部分:工程化与高级类型)
前端·javascript·typescript
小郎君6582 小时前
(六)el-cascader 的展示值为什么不能直接 join:emitPath、路径还原与多选去重
vue.js·算法
Hilaku3 小时前
前端的技术判断力是怎么练出来的?
前端·javascript·程序员
用户093671755413 小时前
用 4500 行 TypeScript 复刻了童年方格纸上的海战棋
前端·vue.js
miofly4 小时前
GitHub 今日推荐|floorplan:AI 读代码自动画交互式架构地图
javascript·开源·github
Dovis(誓平步青云)4 小时前
拖动关键帧角色就抽动,动画编辑器怎样补齐中间状态
开发语言·前端·javascript·机器学习·编辑器
lpfasd1234 小时前
pywebview与Electron
前端·javascript·electron
行走的陀螺仪4 小时前
Claude Code 从入门到实战(一):安装、登录与第一个Vue项目
前端·javascript·vue.js
vipxieliang4 小时前
解构赋值与展开运算符:现代 JS 提效技巧
javascript