我将分两部分回答这个问题,您希望组合Does和Does两个流并触发QueryAction,它应该相当简单,比如
const searchStream = this.search.valueChanges
.pipe(debounceTime(170),
distinctUntilChanged(),
filter(value => value.length > 0)
);
const clickStream = this.selected$.pipe(map(value => value.id.toString());
merge(searchStream, clickStream)
.pipe(tap(value => this.store$.dispatch(new QueryAction({ value: value }),
takeWhile(() => !destroy) // make destroy= true in ngOnDrestroy()
).subscribe();
请注意,我使用merge而不是combinetest,这是因为后者希望两个流在允许触发操作之前都生成一些内容,而您将收到两个值,您希望的是,如果搜索或单击生成一个事件,则该操作应该触发whic这就是我使用merge的原因。
现在我建议你修改一下你的方法,不确定你是否读过dumb vs smart的哲学,如果你在使用ngrx的时候没有帮助的话,可以用google搜索一下ngrx的示例应用。
https://github.com/ngrx/platform/tree/master/example-app,for
我是最好的医生。
如果我很好地理解了您想要实现的目标,我将有一个用于输入搜索的哑组件(这个i imaging是一种自动完成项目的建议框),当通过click或enter选择一个选项时,它将输出查询事件,并且项目列表页将是另一个哑组件。在单击时输出查询事件的t,每个事件将绑定到容器(智能组件)中的同一方法,该方法将分派queryaction
希望有帮助