我已经在我的应用程序中实现了延迟加载。我的一项服务需要包含DecimalPipe。
服务->共享模块->应用模块
这是我的结构。我已经在app.module.ts中添加了“ CommonModule”,并且我的服务也需要十进制管道。
DecimalPipe类型是2个模块的声明的一部分: CommonModule和SharedModule!请考虑将DecimalPipe移至 导入CommonModule和SharedModule的高级模块。你也可以 创建一个新的NgModule,导出并包含DecimalPipe,然后 将该NgModule导入CommonModule和SharedModule。
因此,由于它已经是Commons Module的一部分,所以为什么不从Commons Module中获取Decimal管道。 ? 如果未声明,则显示以下错误
NullInjectorError:没有DecimalPipe提供程序!
请让我知道如何处理此错误。 预先感谢!
答案 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应该可以访问管道。