首页 > 解决方案 > 如果单击 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") 显示在输入字段中,但在用户输入新查询之前,预先输入的内容不会重新出现。

标签: typescriptobservableangular6typeahead

解决方案


如果单击该 typeahead 输入,则 valueChanges Observable 会发出一个新值,这会使 typeahead 下拉菜单再次出现。

当您查看FormControl具有您将看到的方法时:

    setValue(value: any, options?: {
    onlySelf?: boolean;
    emitEvent?: boolean;
    emitModelToViewChange?: boolean;
    emitViewToModelChange?: boolean;
}): void;

我猜你想把它emitEvent改成false.


推荐阅读