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