分组和减少从 ngrx 状态树接收到的自定义可观察数组
Grouping and reducing a custom observable array which was received from ngrx state tree
我通过 API 电话接收数据。数据通过 ngrx-effects 接收并传递到状态树中。然后我可以在 angular 组件的构造函数中获取数据并执行一些 rxjs 操作,例如 mergeMap 和 reduce 以将其转换为我需要在 UI 中显示数据的格式。
我尝试在 stackblitz 中复制场景,它按预期工作。请在下面找到link
link: https://stackblitz.com/edit/typescript-rxjs-reduce
工作流状态树:
export interface WorkflowsState {
workflows : workflow[] | [],
allWorkflowsLoaded : false
}
总体应用程序状态树:
interface Appstate {
workflows: WorkflowsState,
smartNav: SmartNavState
}
作用方式:
@Effect() loadWorkflows$ = this.actions$.pipe(
ofType(WorkflowsActionTypes.LoadWorkflows),
switchMap((action: LoadWorkflows) =>
this.http.get(url)
.pipe(map((res: Workflow[]) => new WorkflowsLoaded(res))))
);
减速器部分:
switch (action.type) {
case: WorkflowsActionTypes.WorkflowsLoaded:
return {
allWorkflowsLoaded : true,
workflows: action.payload
};
public 在仪表板组件中声明的变量:
public workflows$ : Observable<workflow[]>;
public dashboardTile$ : Observable<dashboardTile[]>;
带有选择器的构造函数:
constructor(private store : Store<AppState>) {
this.workflows$ = this.store.select(state => state.workflows.workflows);
}
不确定为什么从 API 获取数据时它不起作用。我需要与示例 (stackblitz link) 控制台部分中显示的输出相同的输出。我能够从 api 获取数据,但 dashboardTile$ 返回为 null。
经过 2 小时的努力,发现问题在于使用 reduce 运算符而不是 scan 运算符。由于 ngrx 状态对象尚未完成,因此未返回累积数组。一旦将 reduce 运算符替换为 scan,它就会开始为我提供所需的输出。以下 post 帮助我确定了修复方法。
我通过 API 电话接收数据。数据通过 ngrx-effects 接收并传递到状态树中。然后我可以在 angular 组件的构造函数中获取数据并执行一些 rxjs 操作,例如 mergeMap 和 reduce 以将其转换为我需要在 UI 中显示数据的格式。
我尝试在 stackblitz 中复制场景,它按预期工作。请在下面找到link
link: https://stackblitz.com/edit/typescript-rxjs-reduce
工作流状态树:
export interface WorkflowsState {
workflows : workflow[] | [],
allWorkflowsLoaded : false
}
总体应用程序状态树:
interface Appstate {
workflows: WorkflowsState,
smartNav: SmartNavState
}
作用方式:
@Effect() loadWorkflows$ = this.actions$.pipe(
ofType(WorkflowsActionTypes.LoadWorkflows),
switchMap((action: LoadWorkflows) =>
this.http.get(url)
.pipe(map((res: Workflow[]) => new WorkflowsLoaded(res))))
);
减速器部分:
switch (action.type) {
case: WorkflowsActionTypes.WorkflowsLoaded:
return {
allWorkflowsLoaded : true,
workflows: action.payload
};
public 在仪表板组件中声明的变量:
public workflows$ : Observable<workflow[]>;
public dashboardTile$ : Observable<dashboardTile[]>;
带有选择器的构造函数:
constructor(private store : Store<AppState>) {
this.workflows$ = this.store.select(state => state.workflows.workflows);
}
不确定为什么从 API 获取数据时它不起作用。我需要与示例 (stackblitz link) 控制台部分中显示的输出相同的输出。我能够从 api 获取数据,但 dashboardTile$ 返回为 null。
经过 2 小时的努力,发现问题在于使用 reduce 运算符而不是 scan 运算符。由于 ngrx 状态对象尚未完成,因此未返回累积数组。一旦将 reduce 运算符替换为 scan,它就会开始为我提供所需的输出。以下 post 帮助我确定了修复方法。