新しい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!
インポートにStoreModule.forRoot({}),
を追加することでこれを解決できました。
StoreModule.forRootは、プロジェクトNgModuleのルートで1回だけ呼び出す必要があります。機能を登録しない場合は、StoreModule.forFeatureを使用します。 forRootを使用すると、Storeに必要なグローバルプロバイダーが登録されます。
この問題に関するgithubのディスカッション here を確認してください。上記の理由は同じ議論で述べられました