Angular Material Autocomplete双向过滤初始输入无响应问题求解
问题原因分析
这一问题是combineLatest操作符的固有触发规则和流配置错误共同导致的:
combineLatest要求所有传入的可观察对象都至少发射过一次值后,才会首次触发订阅回调。- 你当前的代码中,
startWith(['', undefined])是作用在combineLatest合并后的整体流上,并没有给两个独立的valueChanges流提供初始值。
组件初始化后直接修改product输入框时,只有product的valueChanges发射了值,category的valueChanges从未触发过(没有修改过分类控件的值),所以combineLatest不会触发回调,自然没有console输出。当你第一次选中分类后,category的valueChanges第一次发射了值,此时两个流都已经有过发射记录,之后修改任意一个控件的值,combineLatest都会正常触发回调。
修复方案
你需要给每个独立的valueChanges流单独添加startWith操作符,修改后的代码如下:
ngOnInit(): void { combineLatest([ this.inwardForm.get('product')!.valueChanges.pipe(startWith('')), this.inwardForm.get('category')!.valueChanges.pipe(startWith(undefined)), ]).subscribe(result=>{ console.log(result); }); }
修改后两个流初始化时就会分别发射初始值,combineLatest首次触发条件满足,后续修改任意控件都能正常触发回调。
内容的提问来源于stack exchange,提问作者eogabor
相关产品推荐
相关产品推荐

