Angular RxJS 将值从一个元素复制到可观察数组中的下一个元素
Angular RxJS Copy Value from One Element to Next in Observable Array
声明式模式和 RxJS 的新知识...
我的目标是转换一个 observable 并将值从一个元素复制到数组中的下一个元素。
在 Deborah Kurata 的帮助下,此示例使用 Scan 运算符正确设置了“qtyToComplete”。这是需要从一个数组元素复制到下一个数组元素的示例。
https://stackblitz.com/edit/rxjs-scan-deborahk-wym5cc?file=index.ts
下一点更接近我的真实应用程序,我被卡住了。
构建 150 个耙子需要 3 个步骤。
在每个步骤中,“qtyToComplete”(所需数量)需要与完成的数量相匹配
先验元素。
输入步骤: 1
输入步骤当前完成的数量:10
已完成数量更改为 40。需要将 40 复制到步骤 2 中的所需数量(依此类推)。
第二个网格包含在这种情况下不起作用的扫描运算符。我不确定如何 combine/merge 使用原始数据扫描的结果 return 新的 observable。此外,第一个网格的可观察对象 return 是一个数组,但是当扫描被添加到第二个网格的可观察对象时,“对象”被 return 编辑,这会导致错误。
我不依赖于使用扫描。
https://stackblitz.com/edit/angular-ivy-zewhzq?file=src/app/app.component.ts
合并比 combineLatest 扫描效果更好。做出这样的改变 似乎 奏效了。但是我对要求还是有点不清楚,所以不太确定。
更新后的 Stackblitz 在这里:https://stackblitz.com/edit/angular-assembly-scan
基本代码为:
stepsCombinedScan$ = merge(this.steps$, this.selectedDataAction$).pipe(
scan(
(acc, value) =>
value instanceof Array ? [...value] : this.modifySteps(acc, value),
[] as Step[]
)
);
请注意从 combineLatest
到 merge
的变化,以合并步骤和操作。
如果您查看 Stackblitz,我还将两个输入的条目更改为一个操作,因为将它们作为单独的操作处理似乎没有意义。也就是说,您只希望数据在 both 发生变化时发生变化,而不是在一个或另一个发生变化时发生变化。 (有关这方面的注释,请参阅 Stackblitz。)
而且......当然......我需要删除我的关闭因为......你知道......机器人。
声明式模式和 RxJS 的新知识...
我的目标是转换一个 observable 并将值从一个元素复制到数组中的下一个元素。
在 Deborah Kurata 的帮助下,此示例使用 Scan 运算符正确设置了“qtyToComplete”。这是需要从一个数组元素复制到下一个数组元素的示例。 https://stackblitz.com/edit/rxjs-scan-deborahk-wym5cc?file=index.ts
下一点更接近我的真实应用程序,我被卡住了。 构建 150 个耙子需要 3 个步骤。 在每个步骤中,“qtyToComplete”(所需数量)需要与完成的数量相匹配 先验元素。
输入步骤: 1
输入步骤当前完成的数量:10
已完成数量更改为 40。需要将 40 复制到步骤 2 中的所需数量(依此类推)。
第二个网格包含在这种情况下不起作用的扫描运算符。我不确定如何 combine/merge 使用原始数据扫描的结果 return 新的 observable。此外,第一个网格的可观察对象 return 是一个数组,但是当扫描被添加到第二个网格的可观察对象时,“对象”被 return 编辑,这会导致错误。 我不依赖于使用扫描。 https://stackblitz.com/edit/angular-ivy-zewhzq?file=src/app/app.component.ts
合并比 combineLatest 扫描效果更好。做出这样的改变 似乎 奏效了。但是我对要求还是有点不清楚,所以不太确定。
更新后的 Stackblitz 在这里:https://stackblitz.com/edit/angular-assembly-scan
基本代码为:
stepsCombinedScan$ = merge(this.steps$, this.selectedDataAction$).pipe(
scan(
(acc, value) =>
value instanceof Array ? [...value] : this.modifySteps(acc, value),
[] as Step[]
)
);
请注意从 combineLatest
到 merge
的变化,以合并步骤和操作。
如果您查看 Stackblitz,我还将两个输入的条目更改为一个操作,因为将它们作为单独的操作处理似乎没有意义。也就是说,您只希望数据在 both 发生变化时发生变化,而不是在一个或另一个发生变化时发生变化。 (有关这方面的注释,请参阅 Stackblitz。)
而且......当然......我需要删除我的关闭因为......你知道......机器人。