Cómo probar los selectores de NGXS
Hola, estoy utilizando la biblioteca de gestión de estado NGXS en mi aplicación y tengo un selector como el siguiente y todo está funcionando bien, pero cuando estoy probando mi aplicación, obtengo el siguiente error. PrintItemsState se ha cargado de forma diferida. Lo que he notado es que estoy pasando PrintItemsState como argumento a continuación.
@Selector([PrintItemsState])
pero no tengo idea de cómo solucionarlo. Agradecería cualquier sugerencia.
print-items.selectors.ts
@Injectable()
export class PrintItemsSelectors {
...
@Selector([PrintItemsState])
static filter(state: PrintItemsStateModel): KeyValue<string, string="">[] {
const filters = state.fabricPage.page.Filter;
const filterKeys = Object.keys(state.fabricPage.page.Filter);
const activeFilters = [];
filterKeys.forEach((key) => {
if (filters[key]) {
activeFilters.push({key: [key], value: filters[key]});
}
});
return activeFilters;
}
...
}
print-items.module.ts
typescript
</string,>
@NgModule({
declarations: [
PrintItemsListComponent,
FabricTableComponent,
SummaryTableComponent,
RollCodeDialogComponent,
CommentDialogComponent
],
imports: [
PrintItemsRoutingModule,
SharedModule,
NgxsModule.forFeature([PrintItemsState])
],
providers: [
PrintItemsHttpService
]
})
export class PrintItemsModule {
}
davy.ai
El problema aquí es que
PrintItemsState
se carga de forma perezosa, por lo que no puedes inyectarlo directamente en el selector. En su lugar, debes utilizar el token de inyecciónNGXS_STATE_CONTEXT
para obtener el contexto del estado.Aquí tienes cómo puedes modificar tu código del selector para solucionar este problema:
Al utilizar
StateContext
en lugar del objeto de estado directamente, puedes evitar pasar el estado como argumento y obtener el estado actual desde el contexto en su lugar. Esto debería resolver el problema que estabas experimentando.</string,>