gpt4 book ai didi

typeahead - 选择结果后如何清除预先输入的输入?

转载 作者:行者123 更新时间:2023-12-04 16:23:00 32 4
gpt4 key购买 nike

我正在使用 ng-bootstrap typeahead搜索客户数据库的组件。当用户从预先输入的结果列表中选择客户时,我导航到客户详细信息页面。我已经完成了这项工作,但我想在导航发生后清除输入字段。我尝试在 selectItem 中将模型设置为 null 或空字符串。事件逻辑,但这不起作用:

客户搜索-typeahead.component.html

<template #resultTemplate let-r="result" let-t="term">
<div>
<div>
{{r.resource.name[0].given}} {{r.resource.name[0].family}}
</div>
<div>
{{r.resource.birthDate | date: 'dd/MM/yyyy'}}
</div>
</div>
</template>

<input type="text" class="form-control" [resultTemplate]="resultTemplate" (selectItem)="onSelect($event)"
[(ngModel)]="model" placeholder="Start typing a customer name..." [ngbTypeahead]="search"/>

客户搜索-typeahead.component.ts
@Component({
selector: 'customer-search-typeahead',
template: require('./customer-search-typeahead.component.html'),
styles: [`.form-control { width: 300px; }`]
})
export class CustomerSearchTypeaheadComponent {

model: any;
searching: boolean;

constructor(private customerService: CustomerService, private router: Router) {}

onSelect($event) {
this.router.navigate(['/customers', $event.item.resource.id]);
this.model = null;
};

search = (text$: Observable<string>) =>
//omitted for brevity
}

做出选择后,预先输入的输入如下所示:

enter image description here

解决方案

客户搜索-typeahead.component.html
<input type="text" class="form-control" #input [ngbTypeahead]="search" (selectItem)="onSelect($event); input.value='' ">

客户搜索-typeahead.component.ts
onSelect($event, input) {
$event.preventDefault();
this.router.navigate(['/customers', $event.item.resource.id]);
};

最佳答案

您目睹的问题源于 NgModel指令异步更新模型绑定(bind),实际模型在 onSelect 之后更新方法被执行。所以你的模型更新会被 NgModel 覆盖。功能。

幸运的是,我们(ng-bootstrap 的作者)已经准备好所有的弹性点来覆盖您的用例 :-) 您可以做几件事。

首先是$event对象传递给 onSelect方法有 preventDefault()方法,您可以调用它来否决项目选择(并因此写回模型和输入字段更新)。
$event.preventDefault()将确保模型未更新,并且输入字段未使用所选项目更新。但是用户输入的文本仍然是输入的一部分,所以如果你想清除它,你可以直接更新 inputvalue属性(property)。

这是一起演示所有这些技术的代码:

onSelect($event, input) {
$event.preventDefault();
this.selected.push($event.item);
input.value = '';
}

在哪里 input参数是对输入 DOM 元素的引用:
<input type="text" class="form-control" #input 
[ngbTypeahead]="search" (selectItem)="onSelect($event, input)">

最后,这是一个在实践中展示所有这些的 plunker: http://plnkr.co/edit/kD5AmZyYEhJO0QQISgbM?p=preview

关于typeahead - 选择结果后如何清除预先输入的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39783936/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com