NullInjectorError: нет поставщика для DecimalPipe

Я реализовал в своем приложении отложенную загрузку. Одна из моих служб должна включать DecimalPipe.

сервис -> общий модуль -> модуль приложения

Это моя структура. Я уже включил CommonModule в app.module.ts, и Моему сервису также нужен Decimal Pipe.

  1. Включение «десятичной трубы» в мой общий модуль дает следующую ошибку:

Тип DecimalPipe является частью объявлений двух модулей: CommonModule и SharedModule! Пожалуйста, подумайте о перемещении DecimalPipe в модуль более высокого уровня, который импортирует CommonModule и SharedModule. Вы также можете создать новый NgModule, который экспортирует и включает DecimalPipe, а затем импортирует этот NgModule в CommonModule и SharedModule.

Итак, поскольку он уже является частью модуля Commons, почему он не принимает десятичный канал из модуля Commons. ? Если он не объявлен, отображается ошибка ниже

NullInjectorError: нет провайдера для DecimalPipe!

Пожалуйста, дайте мне знать, как исправить эту ошибку. Заранее спасибо!


person Ravi    schedule 07.10.2019    source источник
comment
Ваш CommonModule экспортирует DecimalPipe, чтобы другие модули могли получить к нему доступ? Не могли бы вы показать нам сокращенный фрагмент кода модулей, чтобы мы могли увидеть, как вы экспортируете / импортируете?   -  person nephiw    schedule 08.10.2019
comment
CommonModule от '@ angular / common'   -  person Ravi    schedule 08.10.2019
comment
Я объявил CommonModule как при импорте, так и при экспорте   -  person Ravi    schedule 08.10.2019
comment
Удалось ли вам это решить?   -  person nephiw    schedule 08.10.2019


Ответы (2)


Вам необходимо предоставить DecimalPipe в модуле, который предоставляет вашу услугу.

например, если ваша служба "providedIn: 'root'", вы должны указать DecimalPipe в своем AppModule следующим образом:

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

Если вы хотите создать общий NgModule, который вы импортируете вместо из CommonModule во все свои функциональные модули. Вы бы сделали что-то вроде этого:

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

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

Тогда во всех своих функциональных модулях вы откажетесь от импорта CommonModule и вместо этого импортируете свой SharedModule. Это должно дать вашему пользовательскому коду доступ ко всем каналам и компонентам в CommonModule.

Вы не должны включать встроенные каналы или компоненты Angular в объявления ваших NgModules, поскольку они уже объявлены в NgModules Angular.

Если все, что вы делаете, это пытаетесь использовать DecimalPipe в компоненте, импорт CommonModule в NgModule, в котором вы предоставляете свою службу, должен предоставить вам доступ к каналу.

person nephiw    schedule 07.10.2019
comment
Это не работает, у меня есть общие модули, импортирующие и экспортирующие CommonModule во все модули, но если я хочу использовать decimalPipe в компоненте, мне все равно нужно предоставить его на уровне компонента - person Ben Taliadoros; 03.08.2020