Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度及;NGRX:使用NGRX实体在选择器上进行过滤_Angular_Typescript_Filter_Ngrx_Ngrx Entity - Fatal编程技术网

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(…)。筛选器不是选择器返回语句中的函数`