Qum*_*ala 3 rxjs typescript angular
我有一个带有子组件查询列表的组件。这些子组件中的每一个都公开两个方法,一个返回表单是否作为 有效observable<boolean>,另一个返回一个对象。
在父组件中,我想遍历子组件并检查每个子组件是否有效。我有这样的代码
let valid: boolean = true;
children.forEach(r => {
r.validate().subscribe(v => {
if(!v){
valid = v;
}
});
});
Run Code Online (Sandbox Code Playgroud)
如果在 foreach 循环后有效仍然为真,则它继续收集对象。但是,我认为这是不正确的,因为 foreach 循环可能会在所有 observable 发出值之前完成。我也不确定将多个订阅分配给同一个变量的效果。
除了简单地使 validate() 方法返回一个常规布尔值之外,有没有更好的方法来做到这一点?像 forkjoin 这样的东西会更好吗,foreach 循环只是将所有的 observable 分叉在一起并发出一个数组?
您可以使用forkJoin。
当所有 observable 完成后,从每个 observable 发出最后发出的值。
import { forkJoin } from 'rxjs/observable/forkJoin';
const allObs = forkJoin(...children.map(r => r.validate()));
allObs.subscribe(res => console.log(res)); // Do what you want with the array of results
Run Code Online (Sandbox Code Playgroud)