Angular 自定义管道为什么没有生效?
我在 Angular 项目里写了个自定义管道用来格式化日期,但模板里用了却没反应,控制台也没报错,是不是哪里注册错了?
我已经在 app.module.ts 里声明了这个管道,也加到了 declarations 数组里,但页面上还是显示原始数据。代码大概是这样:
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({ name: 'shortDate' })
export class ShortDatePipe implements PipeTransform {
transform(value: string): string {
return value.split('T')[0]; // 输入 "2023-10-05T12:00:00" 返回 "2023-10-05"
}
}
模板里用的是 {{ item.createdAt | shortDate }},可结果还是原样输出完整时间字符串……
Angular 这种问题最常见的原因其实是 dev server 缓存问题,你改了代码它不认。直接
Ctrl+C停掉,然后重新ng serve试试。如果重启还不行,检查一下这几件事:
1. declarations 里确实写的是
ShortDatePipe(类名),不是字符串'ShortDatePipe'2. 确认管道文件和模块在同一个项目里,没有声明到其他模块去
还有一种情况:如果你的
item.createdAt是通过直接修改对象属性的方式更新的(比如this.item.createdAt = 'xxx'),而不是创建新对象,Angular 的变更检测可能检测不到变化。这种情况下给管道加个pure: false试试:不过正常情况下
createdAt应该是字符串输入,pure: false没必要加。先重启 dev server 试试,大概率是缓存的事。