为ngrx/data实体创建选择器 [英] create a selector for a ngrx/data entity
问题描述
我有一个状态,我想从ngrx/data实体创建选择器.
I have a state and I'd like to create selectors from ngrx/data entities.
import {
Action,
ActionReducer,
ActionReducerMap,
createFeatureSelector,
createSelector,
MetaReducer
} from '@ngrx/store';
import {environment} from '../../environments/environment';
import * as fromRouter from '@ngrx/router-store';
import * as fromDrawer from './drawer';
import {InjectionToken} from '@angular/core';
import {NavigationItem} from '../models/navigation-item';
export interface State {
router: fromRouter.RouterReducerState<any>;
drawerNavigationItems: fromDrawer.State;
}
export const ROOT_REDUCERS = new InjectionToken<ActionReducerMap<State, Action>>('Root reducers token', {factory: () => ({
router: fromRouter.routerReducer,
drawerNavigationItems: fromDrawer.reducer,
}),
});
export const metaReducers: MetaReducer<State>[] = !environment.production ? [] : [];
export const selectRouter = createFeatureSelector<
State,
fromRouter.RouterReducerState<any>
>('router');
const {
selectQueryParams, // select the current route query params
selectQueryParam, // factory function to select a query param
selectRouteParams, // select the current route params
selectRouteParam, // factory function to select a route param
selectRouteData, // select the current route data
selectUrl, // select the current url
} = fromRouter.getSelectors(selectRouter);
export const selectRouteId = selectRouteParam('id');
export const selectStatus = selectQueryParam('status');
// Drawer
export const selectDrawerNavigationItems = (state: State) => state.drawerNavigationItems.items as NavigationItem[];
如何使用预定义的选择器或使用来自ngrx/data的实体或服务编写自己的选择器?
How do I use the pre-defined selectors or write my own with entities or services that came from ngrx/data?
作为一个示例,我想创建一个选择器来选择所有社区"实体,然后在步骤2中按selectRouteId
选择1.
如果您想象路由/communities/:id
,则selectRouteId
返回ID,现在我想要来自CommunityService
的数据,并使用在步骤1中创建或以某种方式导入和使用的选择器并返回结果1 selectRouteId
的ID,因此以后我可以做类似this.store.dispatch(selectCommunityByCurrentRouteId);
As an example I'd like to create a selector that selects all "Community" entities and then, step 2, select 1 by selectRouteId
.
If you imagine a route /communities/:id
, selectRouteId
returns the Id, and now I'd like the data from the CommunityService
and use the selector created or somehow imported and used in step 1 and return a result, 1 Community
with the selectRouteId
's id, so I can later do something like this.store.dispatch(selectCommunityByCurrentRouteId);
此问题特定于@ ngrx/data.
推荐答案
请参见 查看全文