24. Router store
In this section we will use NgRx's router store library to listen to url or router events as actions in our effects.
1. npm i @ngrx/router-store
npm i @ngrx/router-store2. Add to AppModule
Add
StoreRouterConnectingModuleto the AppModule.Often it is needed to create your own router serilaizer but we will skip this step.
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';
import { RouterModule } from '@angular/router';
import { HttpClientInMemoryWebApiModule } from 'angular-in-memory-web-api';
import { StoreModule } from '@ngrx/store';
import { StoreDevtoolsModule } from '@ngrx/store-devtools';
import { EffectsModule } from '@ngrx/effects';
import { StoreRouterConnectingModule } from '@ngrx/router-store';
import { HomeComponent } from './home/containers/home/home.component';
import { AppComponent } from './app.component';
import { InMemoryDataService } from './app.db';
import { reducer } from './state/spinner/spinner.reducer';
import { environment } from '../environments/environment.prod';
@NgModule({
declarations: [AppComponent, HomeComponent],
imports: [
BrowserModule,
RouterModule.forRoot([
{ path: '', pathMatch: 'full', redirectTo: 'home' },
{ path: 'home', component: HomeComponent },
{ path: 'event', loadChildren: './event/event.module#EventModule' }
]),
HttpClientModule,
HttpClientInMemoryWebApiModule.forRoot(InMemoryDataService, {
delay: 1000
}),
StoreModule.forRoot({ spinner: reducer }),
EffectsModule.forRoot([]),
StoreDevtoolsModule.instrument({
name: 'NgRx Demo App',
logOnly: environment.production
}),
StoreRouterConnectingModule.forRoot(),
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {}

3. Add a select box to EventComponent to update URL
Add select box element.
4. Add navigate method to component
Add a navigate method to the component to update the URL.
Delete dispatched LoadAttendees action.
5. Add next action creator for filterBy property
Add new
AttendeesActionTypesforFilterBy.Add new class for
FilterByAdd new
AttendeesActionsforFilterBy.
6. Add an effect to listen to router events
Add an effect listening to
RouterEventsthat begin with/events.
7. Update reducer to have new filterBy
Add switch case to set filterBy property.
8. Add new selector for filtering attendees.
Add selector to get filterBY state property.
Use two getAttendees and getFilterBy to filter the list.
9. Use new selector in EventComponent
Swap getAttendees selector for getFilteredAttendees selector.
StackBlitz Link
Last updated