Angular 角度及;NGRX:使用NGRX实体在选择器上进行过滤
我试图通过属性筛选出有效负载数据Angular 角度及;NGRX:使用NGRX实体在选择器上进行过滤,angular,typescript,filter,ngrx,ngrx-entity,Angular,Typescript,Filter,Ngrx,Ngrx Entity,我试图通过属性筛选出有效负载数据 //reducer.ts case MessagesActionTypes.LOAD_Message_SUCCESS: { console.log('reducer='+ JSON.stringify(action.payload.Messages));//receiving data here return adapter.addAll(action.payload.Messages, state); }
//reducer.ts
case MessagesActionTypes.LOAD_Message_SUCCESS: {
console.log('reducer='+
JSON.stringify(action.payload.Messages));//receiving data here
return adapter.addAll(action.payload.Messages, state);
}
export const getSelectedMessageId = (state: MessageState) => state.selectedMessageId;
// get the selectors
const { selectIds, selectEntities, selectAll, selectTotal } = adapter.getSelectors();
// select the array of Messages
export const selectAllMessages = selectAll;
下面是选择器
// Selector.ts
export const selectHomeQueues = createSelector(
fromReducer.selectAllMessages,
(messages) => messages.filter(message => message.queue === 'HOME')
);
我正在减速器中接收数据,但在运行时选择器中出现错误错误类型错误:无法读取未定义的属性“map”
注意:我在任何地方都找不到任何关于NGRX实体选择器过滤的示例
我们如何过滤NGRX实体中的选择器?我认为您可以这样做:
const getSelectHomeQueues = (store) => {
return store.select(fromReducer.selectAllMessages)
.filter(message => message.queue === 'HOME')
}
无论您想在哪里使用它:
getSelectHomeQueues(this.store).subscribe(...)
错误“无法读取未定义的属性“map”表明您在其他地方遇到错误,因为在您问题中提供的代码中,我们在任何地方都看不到map
在选择器中,您正在过滤消息
,它会传递从未使用过的标题
。您似乎不是在筛选单个邮件,而是在筛选邮件队列,因此:
export const selectHomeQueues = createSelector(
fromReducer.selectAllMessages,
(messages) => messages.queue === 'HOME'
);
我也有同样的问题。您需要将选择器稍微更改为:
export const selectHomeQueues = createSelector(
selectAllMessages,
(messages) => messages.filter(message => message.queue === 'HOME')
);
其中,selectAllMessages
是一个选择器,您可以简单地将其定义为:
export const selectAllMessages = createSelector(
fromReducer.selectAllMessages
);
我们最初尝试的方法是通过适配器,我怀疑我们在这一过程中犯了一个小错误或误解。我希望在选择器文件中有一个专用的过滤器选择器。是否在选择器或组件中定义了
const getSelectHomeQueues
?在选择器中。我可能缺少某些内容。当store甚至没有构造函数时,我们如何将其导入选择器?让我们来举个例子。您有一个组件,并在构造函数中注入存储。您还希望在此组件中使用getSelectHomeQueues,以便插入第二个代码段。您不必将存储导入选择器。通过调用getSelectHomeQueues,可以传递store.get的引用,错误为`TypeError:store.select(…)。筛选器不是选择器返回语句中的函数`