2026/5/21 19:40:33
网站建设
项目流程
网站模板间距,wordpress能商用吗,app制作免费平台,做网站电脑配置要求个高吗在 Angular 开发中#xff0c;管道#xff08;Pipe#xff09;是一个核心且实用的特性#xff0c;它能帮助我们在模板中简洁地转换数据格式#xff0c;无需修改组件逻辑即可实现数据的格式化、过滤、转换等操作。本文将从管道的基础概念入手#xff0c;详解 Angular 内置…在 Angular 开发中管道Pipe是一个核心且实用的特性它能帮助我们在模板中简洁地转换数据格式无需修改组件逻辑即可实现数据的格式化、过滤、转换等操作。本文将从管道的基础概念入手详解 Angular 内置的常用管道DatePipe、UpperCasePipe并手把手教你创建自定义管道让你快速掌握管道的使用技巧。一、Angular 管道是什么管道本质上是一个纯函数默认它接收输入值经过一系列处理后返回转换后的值。在 Angular 模板中通过|符号管道操作符调用语法格式为{{ 输入值 | 管道名: 参数1: 参数2:... }}管道的核心优势在于复用性和简洁性一个管道可以在多个组件模板中调用避免重复编写数据转换逻辑同时模板中的写法直观易懂降低代码冗余。二、常用内置管道开箱即用的便捷工具Angular 内置了数十种管道覆盖了日常开发中常见的数据转换场景这里重点讲解最常用的DatePipe日期格式化和UpperCasePipe大写转换。2.1 UpperCasePipe文本转大写UpperCasePipe用于将字符串全部转换为大写无需传入参数使用极其简单。基本使用组件类定义字符串变量// app.component.ts import { Component } from angular/core; Component({ selector: app-root, templateUrl: ./app.component.html, styleUrls: [./app.component.css] }) export class AppComponent { message: string hello angular pipe!; }模板中调用管道!-- app.component.html -- p原始文本{{ message }}/p p大写文本{{ message | uppercase }}/p输出结果原始文本hello angular pipe! 大写文本HELLO ANGULAR PIPE!2.2 DatePipe日期格式化DatePipe是处理日期的核心管道支持多种日期 / 时间格式可通过参数指定输出样式参数格式遵循 Angular 的日期格式规则也兼容 Unicode CLDR 格式。基本语法{{ 日期值 | date: 格式字符串: 时区: 语言代码 }}格式字符串可选默认值为medium如Sep 1, 2025, 12:30:45 PM时区可选如GMT8、Asia/Shanghai语言代码可选如zh-CN中文、en-US英文。常用格式示例组件类定义日期变量// app.component.ts export class AppComponent { currentTime: Date new Date(); // 当前时间 birthday: Date new Date(2000, 5, 18); // 自定义日期月份从0开始5代表6月 }模板中调用不同格式的 DatePipe!-- app.component.html -- !-- 默认格式medium -- p默认日期格式{{ currentTime | date }}/p !-- 短日期格式 -- p短日期{{ currentTime | date: shortDate }}/p !-- 自定义格式年-月-日 时:分:秒 -- p自定义格式{{ currentTime | date: yyyy-MM-dd HH:mm:ss }}/p !-- 指定时区和语言中文 -- p中文上海时区{{ birthday | date: yyyy年MM月dd日: Asia/Shanghai: zh-CN }}/p输出结果示例默认日期格式Jan 4, 2026, 10:20:30 AM 短日期1/4/26 自定义格式2026-01-04 10:20:30 中文上海时区2000年06月18日DatePipe 常用格式符格式符说明示例yyyy4 位年份2026MM2 位月份补 001dd2 位日期补 004HH24 小时制小时补 010mm分钟补 020ss秒补 030EEEE星期全称中文星期日三、自定义管道满足个性化需求当内置管道无法满足业务需求时比如金额格式化、手机号脱敏、数组过滤等我们可以创建自定义管道。自定义管道需要遵循以下步骤3.1 步骤 1创建管道文件使用 Angular CLI 快速创建管道以 “手机号脱敏管道” 为例ng generate pipe pipes/phone-mask # 简写ng g pipe pipes/phone-mask执行后会生成两个文件phone-mask.pipe.ts管道逻辑和phone-mask.pipe.spec.ts测试文件同时管道会自动注册到模块的declarations数组中。3.2 步骤 2实现管道逻辑自定义管道需要实现PipeTransform接口并重写transform方法核心逻辑。transform方法接收两个参数value需要转换的原始值args可选参数模板中传入的参数列表。修改phone-mask.pipe.ts// phone-mask.pipe.ts import { Pipe, PipeTransform } from angular/core; // Pipe装饰器定义管道名称模板中使用的名称 Pipe({ name: phoneMask // 管道名phoneMask }) export class PhoneMaskPipe implements PipeTransform { /** * 手机号脱敏转换 * param value 原始手机号如13812345678 * param args 可选参数脱敏占位符默认* * returns 脱敏后的手机号如138****5678 */ transform(value: string, args: string *): string { // 校验非11位手机号直接返回原数据 if (!value || value.length ! 11 || !/^1[3-9]\d{9}$/.test(value)) { return value; } // 脱敏逻辑保留前3位和后4位中间4位替换为占位符 return value.replace(/(\d{3})\d{4}(\d{4})/, $1${args.repeat(4)}$2); } }3.3 步骤 3在模板中使用自定义管道组件类定义手机号变量// app.component.ts export class AppComponent { phone1: string 13812345678; // 合法手机号 phone2: string 123456; // 非法手机号 }模板中调用自定义管道!-- app.component.html -- p原始手机号1{{ phone1 }}/p p脱敏手机号1默认*{{ phone1 | phoneMask }}/p p脱敏手机号1自定义#{{ phone1 | phoneMask: # }}/p p非法手机号{{ phone2 | phoneMask }}/p3.4 步骤 4查看输出结果原始手机号113812345678 脱敏手机号1默认*138****5678 脱敏手机号1自定义#138####5678 非法手机号1234563.5 自定义管道进阶多参数示例如果需要传入多个参数比如 “金额格式化管道”支持指定小数位数和货币符号修改transform方法即可// money-format.pipe.ts Pipe({ name: moneyFormat }) export class MoneyFormatPipe implements PipeTransform { // value金额数字decimalDigits小数位数symbol货币符号 transform(value: number, decimalDigits: number 2, symbol: string ¥): string { if (isNaN(value)) return 0.00; // 格式化数字为指定小数位数 const formattedNum value.toFixed(decimalDigits); // 添加货币符号 return ${symbol}${formattedNum}; } }模板中调用多参数用冒号分隔p原始金额{{ 1234.567 }}/p p默认格式化{{ 1234.567 | moneyFormat }}/p p保留1位小数美元{{ 1234.567 | moneyFormat: 1: $ }}/p输出原始金额1234.567 默认格式化¥1234.57 保留1位小数美元$1234.6四、管道的核心特性纯管道与非纯管道默认情况下Angular 管道是纯管道Pure Pipe只有当输入值value或args的引用发生变化时管道才会重新执行transform方法。这意味着对于基本类型字符串、数字、布尔值变化时触发重新计算对于引用类型对象、数组只有引用地址变化如重新赋值才触发修改对象属性 / 数组元素不会触发。如果需要监听引用类型的内部变化比如实时过滤数组可以将管道设置为非纯管道Impure PipePipe({ name: filterArray, pure: false // 非纯管道 })⚠️ 注意非纯管道会在每次变更检测时执行可能影响性能需谨慎使用五、总结Angular 管道是模板中数据转换的 “利器”内置管道UpperCasePipe、LowerCasePipe、DatePipe、CurrencyPipe等能满足大部分基础场景无需重复造轮子自定义管道通过实现PipeTransform接口可快速封装个性化的转换逻辑提升代码复用性性能注意优先使用纯管道非纯管道需评估性能影响。掌握管道的使用和自定义技巧能让你的 Angular 模板更简洁、逻辑更清晰大幅提升开发效率。快去尝试用管道优化你的项目吧