gpt4 book ai didi

javascript - 只订阅一次多个 FormControl

转载 作者:数据小太阳 更新时间:2023-10-29 05:53:46 24 4
gpt4 key购买 nike

我现在已经根据一些逻辑从一个大型 FormGroup 中过滤掉了几个 FormControl - 我想知道如何合并/组合这些选定的 FormControl 并且只有一个订阅..

我查看了 RxJS 文档和大理石图,但没有正确理解。理解所有这些并知道针对我的情况使用哪一个是非常困惑的:

- forkJoin
- combineLatest
- merge
- join
- zip

这里是关于这个问题的更多详细信息:

假设有 2 个 FormControl(即 controlA、controlB)。我想在任何 FormControl 值更改时执行我的一些 handlerFunction。* 它需要在任何控件 valueChanges 时执行我的 handlerFunction 一次(在我的例子中,任何一个控件都将同时更改)

谢谢。

最佳答案

对你来说最好的选择是 combineLatest,它在所有源 Observable 发出至少一个值之后发出,然后在来自任何源 Observable 的每次发射时发出:

Observable.combineLatest(controlA.valueChanges, controlB.valueChanges)
.subscribe(...);

最终,您可以使用 startWith(null) 链接每个源,以保证每个源都将立即发出一个项目并在订阅者中过滤您想要的内容。

Observable.combineLatest(
controlA.valueChanges.startWith(null),
controlB.valueChanges.startWith(null)
)
.subscribe(([val1, val2]) => ...);

顺便说一句,关于其他运营商:

  • zip - 仅当所有来源发出相同数量的项目时发出
  • forkJoin - 当所有源都发出至少一项并完成时发出(valueChanges 永远不会发生)
  • merge - 只是合并 Observables 但你不知道哪个发出了什么值
  • join - 我不认为这是 RxJS 5 的一部分

关于javascript - 只订阅一次多个 FormControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48882237/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com