NullInjectorError:没有为DecimalPipe提供程序

时间:2019-10-07 21:52:02

标签: angular typescript angular-module

我已经在我的应用程序中实现了延迟加载。我的一项服务需要包含DecimalPipe。

服务->共享模块->应用模块

这是我的结构。我已经在app.module.ts中添加了“ CommonModule”,并且我的服务也需要十进制管道。

  1. 在共享模块中包含“十进制管道”会出现以下错误:
  

DecimalPipe类型是2个模块的声明的一部分:   CommonModule和SharedModule!请考虑将DecimalPipe移至   导入CommonModule和SharedModule的高级模块。你也可以   创建一个新的NgModule,导出并包含DecimalPipe,然后   将该NgModule导入CommonModule和SharedModule。

因此,由于它已经是Commons Module的一部分,所以为什么不从Commons Module中获取Decimal管道。 ? 如果未声明,则显示以下错误

  

NullInjectorError:没有DecimalPipe提供程序!

请让我知道如何处理此错误。 预先感谢!

2 个答案:

答案 0 :(得分:5)

您需要在提供服务的模块中提供DecimalPipe

例如,如果您的服务是“ providedIn:'root'” 那么您应该像这样在AppModule中提供DecimalPipe:

import {DecimalPipe} from '@angular/common';
@NgModule({
  declarations: [
    AppComponent,
  ],
  imports: [ ],
  providers: [DecimalPipe],
  exports: [],
  bootstrap: [AppComponent]
})
export class AppModule {
}

答案 1 :(得分:0)

如果您要创建共享的NgModule,而不是在所有功能模块中导入CommonModule 。您将执行以下操作:

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';

...
@NgModule({
  imports: [CommonModule],
  declarations: [...],
  exports: [CommonModule, ...]
})
export class SharedModule {}

然后,在所有功能模块中,您将放弃导入CommonModule,而是导入SharedModule。这应该使您的自定义代码可以访问CommonModule中的所有管道和组件。

您不应在您的NgModules的声明中包括Angular的内置管道或组件,因为它们已在Angular的NgModules中声明。

如果您正在尝试在组件中使用DecimalPipe,则在提供服务的NgModule中导入CommonModule应该可以访问管道。