javascript - 结果不显示在自动完成(Angular)中
问题描述
<p-autocomplete>
我通过后端搜索使用 ng-prime显示值
这是我的html
<p-autoComplete [(ngModel)]="agent" [suggestions]="filteredAgents" name="agents" (completeMethod)="filterAgents($event)" [size]="10"
placeholder="Agents" [minLength]="3"></p-autoComplete>
在 component.ts 我在组件开始时像这样初始化数组
filteredAgents: string[] = [];
我有一种方法可以将查询发送到后端并将其推送到数组
filterAgents(event) {
let query = event.query;
this._agentsService.getAgentSearch(query).subscribe(result => {
result.items.forEach((value) => {
this.filteredAgents.push(value.name);
console.log(this.filteredAgents);
});
});
}
我在控制台中看到过滤值,但在建议中看不到它。
我的问题在哪里?
解决方案
AutoComplete 使用基于 setter 的检查或 ngDoCheck 来实现建议是否已更改以更新 UI。这是使用不可变属性配置的,当启用(默认)基于 setter 的检测时使用,因此您的更改(例如添加或删除记录)应始终创建新的数组引用,而不是操作现有数组,因为 Angular 不会在引用时触发 setter不改变。(角度文档)
Array.prototype.push 不会创建新的引用,而是会改变原始数组。所以你需要做一个新的。
filterAgents(event) {
let query = event.query;
this._agentsService.getAgentSearch(query).subscribe(result => {
this.filteredAgents = [...result.items.map(e => e.name)]
});
}
我映射结果以提取名称。
推荐阅读
- vue.js - 如何使用 jest 使测试覆盖率显示 Vue-cli 3 中的所有 vue 文件
- asynchronous - async/await - 在 future() 之前不等待 - Dart
- angular - Firestore orderBy 布尔值和时间戳
- sql - 引用表“factIngresosCurso”中没有与引用列匹配的主键或候选键
- c++ - 数组的大小
- c# - 应用程序配置文件中的连接字符串“DefaultConnection”不包含必需的 providerName 属性。”
- atlassian-sourcetree - Sourcetree 无法为合并冲突打开 Diffmerge
- java - 在Java8中的可选中抛出自定义异常
- java - 在 TextField 中乘以 2 位数字 - Java FX
- r - 将数字分配给组内一年中的月份