angular - 对服务器数据使用预先输入
问题描述
我在 Angular 7 中使用ng-select并具有以下组件:
export class PostComponent {
selectedCategoryId: number;
categories$: Observable<CategoryModel[]>;
constructor(private categoryService: CategoryService) { }
ngOnInit() {
this.categories$ = this.getCategories('');
}
getCategories(term: string): Observable<CategoryModel[]> {
return this.categoryService.get(term).pipe(map((envelope: Envelope<CategoryMessage.Response>) =>
envelope.result.map((response: CategoryMessage.Response) => {
return {
id: response.id,
name: response.name
};
})));
}
}
categoryService
返回包含该术语的位置Categories
。Category Name
在模板上,我有以下内容:
<ng-select
class="select"
[items]="categories$ | async"
[addTag]="true"
bindLabel="name"
bindValue="id"
[multiple]="false"
[(ngModel)]="selectedCategoryId">
</ng-select>
问题
仅当键入的单词有 3 个或更多字母时,如何通过服务调用 API?这是为了防止获得数千个类别。
如何集成我的代码以使用 typeahead?
解决方案
模板:
<ng-select
class="select"
[items]="categories$ | async"
[addTag]="true"
bindLabel="name"
bindValue="id"
[multiple]="false"
[(ngModel)]="selectedCategoryId"
(ngModelChange)="onModelChange($event)">
</ng-select>
角组件:
public onModelChange(term) {
if (term && term.length >= 3) {
this.getCategories(term).subscribe(categories => {
// You can put you logic here...
});
}
}
编辑:也许您还可以查看debounce
对于防止打字头期间出现许多请求非常有用的功能。请检查这个例子。
推荐阅读
- c# - 抛出异常时可以退出循环吗?
- android - 如何在使用导航组件导航时保存片段状态
- python - 有没有办法将 R 包中的数据帧保存为 hdf5 以加载到 python 中?
- mysql - 将 ORDER BY 添加到 LEFT OUTER JOIN
- html - 如何避免将页面元素隐藏在固定元素后面
- c# - SSIS 包尝试使用错误的 c# 版本运行
- r - 由强制 _ 平均和 SD _ 百分比引起的 NA
- node.js - 是否可以从 Javascript 运行 npm 脚本
- java - 如何避免复制粘贴 hasRole 或 hasPermission 注释?
- c++ - 你如何“缓冲”UNIX 信号