【问题标题】:remove last entered character when typeahead doesnt have any results当 typeahead 没有任何结果时删除最后输入的字符
【发布时间】:2019-12-24 06:00:51
【问题描述】:

您好,我正在使用 ng bootstrap typeahead。这是我的搜索功能:

search = (text$: Observable<string>) =>
    text$.pipe(
      debounceTime(200),
      distinctUntilChanged(),
      map(term => term.length < 2 ? []
        : states.filter(v => v.toLowerCase().indexOf(term.toLowerCase()) > -1).slice(0, 10))
    )

我想禁止输入不属于我的下拉选项的输入文本,例如,如果下拉选项是: 一二三 如果用户尝试键入 k,则 k 字符将被删除,因为没有找到匹配的下拉选项...

【问题讨论】:

    标签: angular ng-bootstrap


    【解决方案1】:

    只需将最后一个给你结果的“术语”存储在一个变量中。轻按一下,如果 result.length

      public model: any;
      public lastOk:any;
    
      search = (text$: Observable<string>) =>
        text$.pipe(
          debounceTime(200),
          distinctUntilChanged(),
          map((term) => 
          {
            const result=states.filter(v => v.toLowerCase().indexOf(term.toLowerCase()) > -1)
                     .slice(0, 10);
            if (result.length)
              this.lastOk=term
            return result;
          }),
          tap((res)=>{
            if (res.length<=0)
            this.model=this.lastOk
          })
        )
    

    你可以在stackblitz看到

    注意:如果您不删除条件 term.length

    【讨论】:

    • 谢谢,但是字符被延迟删除了..有什么解决办法吗?如果之前的输入不匹配,我不想让用户按下任何输入...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多