首次选择下拉框时startWith值始终为null,后续正常,原因何在?
问题原因
出现这个现象的核心是组件初始化时机和表单控件初始值的同步顺序不匹配:
- 当
ngOnInit执行并调用getNames()时,你的formControl还没被赋予有效初始值——要么是你没给formControl设置初始值,要么是下拉框的默认选中项还没同步到表单控件里,所以startWith(formControl.value)里的value是null,导致首次请求用了null作为参数。 - 后续选择下拉框选项时,
formControl.valueChanges流被触发,此时formControl已经持有了选中的有效值,所以switchMap能拿到正确的group值,请求返回正常结果。
修复思路
你可以通过以下两种方式解决:
给
formControl设置明确的初始值:在声明表单控件时直接指定默认值,比如:formControl = new FormControl('你的默认分组值');这样
startWith在初始化时就能拿到正确的初始值,触发第一次正常请求。直接在
startWith里传入下拉框的默认选项值:如果下拉框有固定的默认选中项,把这个值直接传给startWith,确保首次触发的参数不为null,比如:startWith(this.defaultGroupValue)
内容的提问来源于stack exchange,提问作者Nero
相关产品推荐
相关产品推荐

