typescript - 如果单击 ngx typeahead 结果,则停止 formGroup valueChanges observable
问题描述
在对我的 API 的 http 调用完成后,我有一个带有 typeahead 下拉列表的 FormControl 输入,它接收一个可观察的主题。
这里的问题是,我下面的函数有 valueChanges Observable 监听新的输入。因此,如果用户键入“copenhagen”,API 将返回与查询 f.ex. 匹配的区域:“Copenhagen, Hovedstaden, Danmark”。如果单击该 typeahead 输入,则 valueChanges Observable 会发出一个新值,这会使 typeahead 下拉菜单再次出现。
subscribeToLocation() {
const subscription = this.locF.valueChanges
.pipe(catchError(err => of(err)), debounceTime(800), distinctUntilChanged())
.subscribe((formValue: ILocation<any>) => {
this.initStoryLocationBody(formValue);
})
}
查看流量图像
我已经尝试在setValue()
和中将 emitEvent 设置为 false patchValue()
。
期望的行为:用户类型,即:“copenhagen”-API 获取与该查询匹配的位置-返回位置数组并在 typeahead 中显示(这是有效的)-用户单击一个位置,并且 object.place_name(例如“København, Hovedstaden, Denmark") 显示在输入字段中,但在用户输入新查询之前,预先输入的内容不会重新出现。
解决方案
如果单击该 typeahead 输入,则 valueChanges Observable 会发出一个新值,这会使 typeahead 下拉菜单再次出现。
当您查看FormControl
具有您将看到的方法时:
setValue(value: any, options?: {
onlySelf?: boolean;
emitEvent?: boolean;
emitModelToViewChange?: boolean;
emitViewToModelChange?: boolean;
}): void;
我猜你想把它emitEvent
改成false
.