javascript - 实现了自定义预输入,需要额外的功能

标签 javascript css angular typeahead

我在 Angular 中创建了自定义预输入。查看代码 here

我必须在这里再添加两个功能,但我不知道如何实现。

  1. 当用户开始输入并显示选项时,显示选项中的匹配字符应该是不同的颜色,比如蓝色或红色

  2. 现在我可以通过鼠标单击来从显示的菜单中选择选项,我还想添加用于导航和键盘选择的选项。

请告知我如何继续实现上述这些功能。

最佳答案

对于第一个功能,您可以执行如下操作:

使用以下代码创建一个 highlight.pipe.ts 文件:

import { PipeTransform, Pipe } from '@angular/core';

@Pipe({ name: 'highlight' }) export class HighlightPipe implements PipeTransform {   transform(text: string, search): string {
    if (search && text) {
      let pattern = search.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
      pattern = pattern.split(' ').filter((t) => {
        return t.length > 0;
      }).join('|');
      const regex = new RegExp(pattern, 'gi');

      return text.replace(regex, (match) => `<span class="search-highlight">${match}</span>`);
    } else {
      return text;
    }   } }

在 app.module.ts 中注入(inject)这个管道

import { HighlightPipe } from './highlight.pipe';

更新您的应用组件

<div class="parent">
    <div>
        <h5>Sample Custom Typeahead</h5>
        <p>Try typing "Win" or "Mob" in input box below</p>
        <input type="text" [(ngModel)]="searchByThis" (keyup)="showDropdown()">
    </div>
    <div>
        <div (clickOutside)="closeDropDown()">
            <div class='search-drop-down' *ngIf="displayDropdown">

                <div (click)='selectValue(product)' class='search-results' *ngFor="let product of sampleItemDetails | searchFilter: searchByThis ">

                    <div [innerHTML]="product.name  | highlight : searchByThis">
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

不要忘记更新您的 CSS:app.component.css

:host ::ng-deep .search-highlight{
  background-color: #F2E366;
}

我已经提到了这个gist

关于javascript - 实现了自定义预输入,需要额外的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50705578/

相关文章:

javascript - meteor 账号登录失败

html - less 文件之间未定义 CSSless mixin

node.js - 如何将 Passport.js 中的 token 存储在本地存储中

html - 如何在 PrimeNG 中自定义下拉滚动条

Angular-6-JSON 架构形式错误 : Nested Arrays getControl error: Unable to find "0" item in FormGroup

javascript - ExtJS 使用 Ext.KeyMap 监听全局击键

javascript - Rails 和 YouTube API : Issues loading iframe

javascript - Lodash 或 Javascript - 按名称分组,然后按相等的字符串分组

css - Bootstrap 4 Flexbox 侧边栏在使用位置 :fixed 时变薄

html - 按钮不会停留在背景图片上