javascript - NgRx 参数化选择器显示空结果
问题描述
尝试在 NgRx 中使用参数化查询,但结果为空。
下面是 stackblitz 版本的代码:https ://stackblitz.com/edit/ngrx-parameterized-query
减速机代码
export const userAdapter = createEntityAdapter<UserModel>({
selectId: x => x.UserId
});
export interface UserlistState extends EntityState<UserModel>{
};
export const initialState: UserlistState = userAdapter.getInitialState({
});
export function UserlistReducers(
state: UserlistState = initialState,
action: actions.UserlistActions
){
switch(action.type){
case actions.UserlistActionTypes.UPSERT_USERS:
return userAdapter.upsertMany(action.users,state);
default:
return state;
}
}
export const getUserlistState = createFeatureSelector<UserlistState>('userlist');
export const {
selectIds,
selectEntities,
selectAll,
selectTotal
} = userAdapter.getSelectors(getUserlistState);
export const getUsersByOrganizationId = createSelector(selectAll,
(users: Array<UserModel>, organization_id: number)=>{
return users.filter(x=> x.OrganizationId == organization_id)
}
)
用法
watchlist = ():Observable<UserModel[]> =>{
return this.userlistStore.select(reducers.selectAll);
}
watchlistByOrganizationId = (organization_id: number): Observable<UserModel[]> =>{
return this.userlistStore.select(reducers.getUsersByOrganizationId(organization_id));
}
解决方案
你的选择器是错误的。
应该是这样的;这organization_id
是选择器函数的参数,因此它在函数范围内可用,无需将其添加到箭头函数参数列表中。将selectAll
返回用户并将其作为参数传递给箭头函数。以下应该按预期工作!
export const getUsersByOrganizationId = (organization_id: number) => createSelector(selectAll,
(users: Array<UserModel>) => {
return users.filter(x => x.OrganizationId == organization_id)
}
);
推荐阅读
- python - 在堆积条形图中包括散景工具提示
- javascript - 'HttpResponse.Data' 和执行的微风查询的'results' 属性值不同
- xslt - 使用 json 作为输入删除 xslt 中的重复项
- nginx - 如何将标题“Access-Control-Allow-Origin:”添加到某些响应代码
- java - 如何识别应用程序是在 WebLogic 还是 JBoss 上运行?
- algorithm - 算法的复杂度是多少:T (n) = 3 * T (n ÷ b) + n² + 1?
- excel - 如何使用 VBA 将多个 Excel 工作表合并为一个 Excel 工作表
- html - 应用fixed时背景图不会覆盖,不应用时不会垂直覆盖
- scala - Int 类是抽象的;无法实例化
- hp-uft - HP ALM 卡在“等待统一功能测试...”状态