【发布时间】:2025-12-11 10:05:01
【问题描述】:
我有一个名为“workcentersFiltered”的可观察对象,类型为Observable<Workcenter[]>
当我选择工厂时,我可以使用以下代码成功筛选出我的工作中心 - 没问题:
this.workcentersFiltered = this.newLineForm.get('plant').valueChanges
.flatMap(selectedPlant => {
return this.dataStore.Workcenters.map(workcenters => {
return workcenters.filter(x => x.PlantNumber === selectedPlant.PlantNumber);
});
});
问题是,当一个完全不同的、独立的可观察的“'workcenter'.valuechanges”发出一个字符串(它是一个输入字段 - 我正在尝试实现自动完成)时,我想进一步缩小该数组的范围。
所以问题是,我如何订阅this.newLineForm.get('workcenter').valueChanges,以便它发出的字符串值可用于进一步缩小workcentersFiltered 中“隐藏”的数据(已绑定到this.newLineForm.get('plant').valueChanges .
我的困境有意义吗?我是否必须改为将 workcenteresFiltered 重做为 aBehaviorSubject,或者这里的正确解决方案是什么?
编辑更多解释
当前 workcentersFiltered 从 dataStore.Workcenters 获取数据,当 plant-forminput.valuechanges 发出更改时,因为选择了工厂。因此,我可以将所有工作中心缩小到仅与所选工厂匹配的工作中心。它适用于我上面的代码。
不过,我想介绍一个关于 factory-forminput.valuechanges 和 workcentersFiltered 之间序列的新操作。根据 workcenter-forminput.valuechanges 的排放,我想进一步缩小选项范围。
所以在我的 UI 上的第 1 步,用户可以从下拉列表中选择一个工厂,然后过滤掉来自其他工厂的所有工作中心 - 这很有效。
然后,步骤 2 是让用户选择特定的工作中心。这是一个文本输入字段。我希望在此处输入每个字母(在 workcenter-forminput.valuechanges 上发出),以进一步缩小选项范围(用于自动完成)。
我很难想象解决方案,因为第 2 步中新引入的 observable (workcenter-forminput.valuechanges) 仅在它发出时才相关。
【问题讨论】:
-
对不起,我不明白你的问题。你能试着解释更多或不同吗?和/或制作一个小的大理石图来展示您的期望?
-
抱歉,我不确定如何制作大理石图。我编辑了我的帖子,试图以不同的方式解释它。
-
我意识到将过滤的工作中心保持为可观察的确实没有意义。一旦我从可观察的数据存储中检索数据,我只会将过滤工作中心存储为普通数组 - 也不是可观察的。然后我可以更轻松地使用它。
标签: javascript angular rxjs reactive-programming rxjs5