【Question】为什么angular component 使用内置的pipe 需要注入

问题原因

待调查

问题描述

当在使用内置的pipe 的时候我们一般使用在template 文件里面,并没有需要额外注入,只需要在component所在module里面加上这句即可import { CommonModule } from '@angular/common'; 因为像常用了ngIf, ngSwitch,datePipe,jsonPipe 都在CommonModule 中被声明。

template 里面直接使用datePipe 运行正常,时间能够被正确的transform

<nb-card >
    <nb-card-body>
		current time by template use: {{ '2022/6/1/ 16:03' | date: 'yyyy-MM-dd HH:mm:ss' }}
    </nb-card-body>
</nb-card>

但是当component里面调用譬如datePipe 时, 不在module 或者componentproviders 里面引入DatePipe, 则会报注入错误

<nb-card >
    <nb-card-body>
		current time by component use: {{ currentForComponent }}
    </nb-card-body>
</nb-card>
export class DemoComponent implements OnInit {

  currentForComponent: string;

  constructor(
    private datePipe: DatePipe,  // 不添加providers 则会报注入错误
  ) { }
  
  ngOnInit(): void {
    this.currentForComponent= this.datePipe.transform('2022/6/1/ 16:03', 'yyyy-MM-dd HH:mm:ss');
  }
}

注入错误信息如下:

ERROR Error: Uncaught (in promise): NullInjectorError: R3InjectorError(DemoComponent)[DatePipe -> DatePipe -> DatePipe -> DatePipe -> DatePipe]: 
  NullInjectorError: No provider for DatePipe!

参考文献

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值