Angular 在NGX中组合多个@Select

Angular 在NGX中组合多个@Select,angular,rxjs,observable,ngxs,Angular,Rxjs,Observable,Ngxs,我在一个组件中有多个@select,如下所示: @Select(ItemState.getMode) mode: Observable<Item>; @Select(QuestionState.SingleQuestion) question: Observable<Question>; @Select(ItemState.getItemNames) itemNames: Observable<any>; @Select(ItemState.getItemSt

我在一个组件中有多个@select,如下所示:

@Select(ItemState.getMode) mode: Observable<Item>;
@Select(QuestionState.SingleQuestion) question: Observable<Question>;
@Select(ItemState.getItemNames) itemNames: Observable<any>;
@Select(ItemState.getItemStepDetails) itemStepDetails: Observable<any>;
现在,我想在我的ngOnInit中获取所有的值,并将它们分配给一些可以在模板中使用的变量。我不想使用async直接使用它们,因为我需要操作它们


最好的方法是什么?

如评论所述,CombineTest可能就是您要寻找的运营商

如果您通过映射(而不是组件中定义的许多变量)将这些源选择器观测值组合到另一个流中,则仍然可以在模板中使用异步管道。e、 g

this.combinedStream$ = combinelatest(mode$, question$, itemName$, itemDetails$)
.pipe(
  map(([m, q, name, detail]) => {
    // Manipulate/project the 4 results into what you need
    return { .. };
});
然后在模板中,您可以使用combinedStream$|async访问被操纵的表单,并让异步管道处理订阅


就NGX而言,如果数字选择器的这种组合变得很常见,并且您希望在多个组件之间重用这种组合,那么您应该查看NGX,或者像往常一样直接在模板中使用它们。

正如评论所提到的,CombineTest可能是您要寻找的操作符

如果您通过映射(而不是组件中定义的许多变量)将这些源选择器观测值组合到另一个流中,则仍然可以在模板中使用异步管道。e、 g

this.combinedStream$ = combinelatest(mode$, question$, itemName$, itemDetails$)
.pipe(
  map(([m, q, name, detail]) => {
    // Manipulate/project the 4 results into what you need
    return { .. };
});
然后在模板中,您可以使用combinedStream$|async访问被操纵的表单,并让异步管道处理订阅


就NGX而言,如果数字选择器的这种组合变得很常见,并且您希望在多个组件之间重用该组合,那么您需要查看NGX,或者像往常一样直接在模板中使用它们。

forkJoin,combinelatetest,zip,具体取决于您想要做什么。我可以使用CombineTest而不是forkJoin,但与forkJoin一样,我遇到的问题是它没有执行subscribe中的代码。@SunilOjha因为forkJoin正在等待所有流完成,NGXS的状态流不是自动完成流,只需使用CombineTestForkJoin,CombineTest,zip,具体取决于您希望执行的操作。我可以使用CombineTest而不是forkJoin,但与forkJoin一样,我遇到的问题是它没有执行subscribe中的代码。@SunilOjha因为forkJoin正在等待所有流完成,NGXS的状态流不是自动完成流,请使用CombineTest