Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NullInjectorError: No provider for ReducerManager

I am using the new ngrx 5. This is the file that holds the reducers and the 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')

This is how I am importing the storeModule

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

export class AppModule { }

I have followed this tutorial

When I run the app, I get the following error:

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

But if I do provide ReducerManager in the providers, I get this error:

No provider for ReducerManagerDispatcher!
like image 211
suku Avatar asked Mar 06 '18 09:03

suku


2 Answers

Managed to solve this by adding StoreModule.forRoot({}), in the imports.

StoreModule.forRoot should only be called once in the root of your project NgModule. If you wan't to register a feature, use StoreModule.forFeature. Using forRoot registers the global providers needed for Store.

Check the github discussion here on this issue. The above reason was stated in the same discussion

like image 78
suku Avatar answered Nov 10 '22 07:11

suku


I had the same problem and I found this solution

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

like image 3
Rotceh Avatar answered Nov 10 '22 08:11

Rotceh