Angular ng选择“防止在typeahead上使用特殊字符”

Angular ng选择“防止在typeahead上使用特殊字符”,angular,angular-ngselect,Angular,Angular Ngselect,使用ng select库是否可以防止处理特殊字符?类似于解决方案的东西 我尝试了多种方法,但似乎typeahead值都没有公开,也无法修改 有什么解决办法吗?即使在typeahead主题上触发.next也不会改变视图中显示的内容。如果我知道您想阻止键入特殊字符,并且根本不想看到它们 答复: 是的,您可以使用按键事件处理程序阻止特殊字符的处理,如下所示 HTML: 如果你想允许一些特殊字符,但你不知道有什么字符码。检查这里:如果我知道您想阻止键入特殊字符,而您根本不想看到它们 答复: 是的,您可以

使用ng select库是否可以防止处理特殊字符?类似于解决方案的东西

我尝试了多种方法,但似乎typeahead值都没有公开,也无法修改


有什么解决办法吗?即使在typeahead主题上触发.next也不会改变视图中显示的内容。

如果我知道您想阻止键入特殊字符,并且根本不想看到它们

答复:

是的,您可以使用按键事件处理程序阻止特殊字符的处理,如下所示

HTML:


如果你想允许一些特殊字符,但你不知道有什么字符码。检查这里:

如果我知道您想阻止键入特殊字符,而您根本不想看到它们

答复:

是的,您可以使用按键事件处理程序阻止特殊字符的处理,如下所示

HTML:


如果你想允许一些特殊字符,但你不知道有什么字符码。检查这里:

对于特殊字符,我假设您指的是所有非数字和非字母字符。在这种情况下,您可以在使用类似searchTerm=searchTerm.replace/[^a-zA-Z0-9]/g;;这样的简单正则表达式进行筛选之前去掉特殊字符

一个简单的例子

模板:

<h5>Select:</h5>
<ng-select [items]="items$ | async"
  bindLabel="name"
  bindValue="name"
  [closeOnSelect]="true"
  [multiple]="true"
  [hideSelected]="true"
  [typeahead]="input$">
</ng-select>
组成部分:

export class AppComponent  {
  public items$: Observable<Person[]>;
  public input$ = new Subject<string | null>();

  constructor() {
    this.input$.subscribe((typeahead) => {
      console.log(typeahead);
    });

    this.items$ = this.input$.pipe(
      map((term) => this.searchPeople(term))
    )
  }

  private searchPeople(term: string | null): Person[] {
    let searchTerm = term ? term : '';
    searchTerm = searchTerm.replace(/[^a-zA-Z0-9 ]/g, "");
    return [
      { name: 'Jack Doe' },
      { name: 'Jonathan Hammond' },
      { name: 'Lindsay Johann' },
    ].filter((person) => {
      return person.name.toLowerCase().startsWith(searchTerm.toLowerCase());
    });
  }
}
请注意,0-9之后只包含一个空格字符。因此,如果有多个,过滤器将失败,并且不会有任何建议

例如: 正在键入jona!@$%^&哈蒙德仍然会建议乔纳森·哈蒙德。但是,键入jona!@$%^&哈姆*}翁德注意到^和&之间的空格并不表示什么


示例应用程序派生自。

通过特殊字符,我假定您指的是所有非数字和非字母字符。在这种情况下,您可以在使用类似searchTerm=searchTerm.replace/[^a-zA-Z0-9]/g;;这样的简单正则表达式进行筛选之前去掉特殊字符

一个简单的例子

模板:

<h5>Select:</h5>
<ng-select [items]="items$ | async"
  bindLabel="name"
  bindValue="name"
  [closeOnSelect]="true"
  [multiple]="true"
  [hideSelected]="true"
  [typeahead]="input$">
</ng-select>
组成部分:

export class AppComponent  {
  public items$: Observable<Person[]>;
  public input$ = new Subject<string | null>();

  constructor() {
    this.input$.subscribe((typeahead) => {
      console.log(typeahead);
    });

    this.items$ = this.input$.pipe(
      map((term) => this.searchPeople(term))
    )
  }

  private searchPeople(term: string | null): Person[] {
    let searchTerm = term ? term : '';
    searchTerm = searchTerm.replace(/[^a-zA-Z0-9 ]/g, "");
    return [
      { name: 'Jack Doe' },
      { name: 'Jonathan Hammond' },
      { name: 'Lindsay Johann' },
    ].filter((person) => {
      return person.name.toLowerCase().startsWith(searchTerm.toLowerCase());
    });
  }
}
请注意,0-9之后只包含一个空格字符。因此,如果有多个,过滤器将失败,并且不会有任何建议

例如: 正在键入jona!@$%^&哈蒙德仍然会建议乔纳森·哈蒙德。但是,键入jona!@$%^&哈姆*}翁德注意到^和&之间的空格并不表示什么


示例应用程序派生自。

该链接不适用于我。作为提示,ng select是一个onPush组件,因此如果您必须在中间处理中使用,您可能必须手动执行更改检测以更改视图。@MikeOne我到底在更改视图上的哪些内容?我看不到typeahead值存储在何处请添加一个示例,说明您要执行的操作。问题不清楚,您输入的链接不起作用。请修复问题中的链接链接链接链接不适用于我。作为提示,ng select是一个onPush组件,因此如果您必须在中间处理中使用,您可能必须手动执行更改检测以更改视图。@MikeOne我到底在更改视图上的哪些内容?我看不到typeahead值存储在何处请添加一个示例,说明您要执行的操作问题不清楚,并且您输入的链接不起作用。请修复问题中的链接