首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ngx-bootstrap typeahead可观察

ngx-bootstrap typeahead可观察
EN

Stack Overflow用户
提问于 2017-07-03 17:17:02
回答 2查看 2.7K关注 0票数 4

因此,我有一个类似于下面的a typeahead输入字段:

代码语言:javascript
复制
<input formControlName="segment"
              [typeahead]="segments"
              (typeaheadLoading)="segmentsLoading($event)"
              (typeaheadNoResults)="segmentsNoResults($event)"
              (typeaheadOnSelect)="segmentOnSelect($event)"
              typeaheadOptionsLimit="10"
              typeaheadMinLength="3"
              typeaheadWaitMs="300"
              [typeaheadItemTemplate]="customSegmentTemplate"
              class="form-control">

还有一个观察值,它可以帮助我在typeahead中获得建议。

代码语言:javascript
复制
this.segments = Observable.create((observer: any) => observer.next(this.segments))
  .mergeMap((number: string) => this.suggestionsService.getSegmentSuggestions(this.editForm.get('segment').value);

我的问题是,即使我的输入字段值长度小于3,即使我设置了typeaheadMinLength="3",可观察体也会发送请求。当用户输入一个值,然后快速删除一些字符(比我的去抖动时间更快),然后尝试输入一个新值时,就会发生这种情况。当我收到长度小于3的输入值时,我的建议API失败,然后我的应用程序中断,我必须刷新页面才能使其再次工作。我试着将去抖动时间设置为0,我当时没有这个问题,但这是一个糟糕的做法,它发送了太多的请求到我的API。对如何解决这个问题有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2019-03-02 01:57:44

这是一个解决方法的草图,在他们修复控件之前可能会有所帮助:

在您的observable触发服务调用之前,通过管道传递一个过滤器操作符:

代码语言:javascript
复制
this.segments = Observable.create((observer: any) => observer.next(this.segments))
    .pipe(filter(number => number.length >= YOUR_MIN_LENTH_LIMIT),
    .mergeMap((number: string) => this.suggestionsService.getSegmentSuggestions(this.editForm.get('segment').value));
票数 1
EN

Stack Overflow用户

发布于 2017-12-23 21:21:57

应该是[typeaheadMinLength]="3" instead of typeaheadMinLength="3"。当你像typeaheadMinLength="3"一样给它赋值时,它就变成了一个字符串赋值。

您可以使用`typeaheadWaitMs=" 500 "`,它会在用户输入500ms后调用api调用。它的行为就像去反弹力。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44881862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档