web-dev-qa-db-ja.com

NullInjectorError:ReducerManagerのプロバイダーがありません

新しい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!
9
suku

インポートにStoreModule.forRoot({}),を追加することでこれを解決できました。

StoreModule.forRootは、プロジェクトNgModuleのルートで1回だけ呼び出す必要があります。機能を登録しない場合は、StoreModule.forFeatureを使用します。 forRootを使用すると、Storeに必要なグローバルプロバイダーが登録されます。

この問題に関するgithubのディスカッション here を確認してください。上記の理由は同じ議論で述べられました

24
suku