NullInjectorError:ReducerManager 没有提供程序

Posted

技术标签:

【中文标题】NullInjectorError:ReducerManager 没有提供程序【英文标题】:NullInjectorError: No provider for ReducerManager 【发布时间】:2018-08-14 02:30:01 【问题描述】:

我正在使用新的 ngrx 5。这是包含 reducer 和 featureSelector 的文件:

import AppState from '../interfaces/app.state'
import  ActionReducerMap, createFeatureSelector  from '@ngrx/store'
import  partnerReducer  from './partner.reducer'

export const reducers: ActionReducerMap<AppState> = 
  partnerState: partnerReducer


export const getAppState = createFeatureSelector<AppState>('appState')

这就是我导入 storeModule 的方式

@NgModule(
declarations: [...],
imports: [...
  RouterModule.forRoot(ROUTES),
  StoreModule.forFeature('appState', reducers)
],
providers: [...],
bootstrap: [AppComponent],
entryComponents: [...]
)

export class AppModule  

我已关注this 教程

当我运行应用程序时,我收到以下错误:

"StaticInjectorError(AppModule)[StoreFeatureModule -> ReducerManager]: 
\n  StaticInjectorError(Platform: core)[StoreFeatureModule -> ReducerManager]: 
\n    NullInjectorError: No provider for ReducerManager!"

但如果我确实在提供程序中提供了 ReducerManager,我会收到此错误:

No provider for ReducerManagerDispatcher!

【问题讨论】:

你是否在 app.module 中将 ReducerManager 添加到提供程序? 是的,然后我得到了 ReducerManagerDispatcher 的 No provider!错误 【参考方案1】:

设法通过在导入中添加StoreModule.forRoot(), 来解决这个问题。

StoreModule.forRoot 只能在你的项目 NgModule 的根目录中调用一次。如果您不想注册功能,请使用 StoreModule.forFeature。使用 forRoot 注册 Store 所需的全局提供程序。

查看关于此问题的 github 讨论 here。上述原因在同一个讨论中有所说明

【讨论】:

【参考方案2】:

我遇到了同样的问题,我找到了这个解决方案

imports: [
       StoreModule.forRoot(), 
    StoreModule.forFeature('filter-app', filterReducer)
]

【讨论】:

这与下面的答案相同

以上是关于NullInjectorError:ReducerManager 没有提供程序的主要内容,如果未能解决你的问题,请参考以下文章

角度业力 - NullInjectorError:InjectionToken 配置没有提供者

NullInjectorError:没有提供 ElementRef

Angular 9:NullInjectorError:没有 CompilerFactory 的提供者

NullInjectorError:没有 HttpClient 的提供者

Angular:NullInjectorError:没有HttpClient的提供者[重复]

NullInjectorError:没有提供 DecimalPipe