angular - Angular 2中的自动完成在选择后在输入框中显示id而不是名称
问题描述
我正在 Angular 2 中实现自动完成。当我在输入框中键入字母时,我可以过滤结果。但是当我选择一个项目时,它并没有得到名称,而是改为了 id。请看下图:
但是当我单击或选择一个项目时,输入框中的内容如下:
该名称已消失,取而代之的是一个 id,这会使最终用户感到困惑。下面是我如何实现它。
.ts
glMasterList: ParamGLMaster[] = [];
filteredGlMasterList: Observable<any[]>;
getGlMaster() {
this.as.getGlMaster().subscribe((data: any) => {
this.glMasterList = data;
this.filteredGlMasterList = this.GLCode.valueChanges.pipe(
startWith(""),
map(gl => (gl ? this.filterGlMasterList(gl) : this.glMasterList.slice()))
)
});
}
filterGlMasterList(name: string) {
return this.glMasterList.filter(
ml => ml.GLDesc.toLowerCase().indexOf(name.toLowerCase()) === 0
);
}
.html
<mat-form-field>
<input
type="text"
matInput
[matAutocomplete]="auto1"
formControlName="GLCode"
placeholder="GL Code"
/>
<!-- <mat-select placeholder="GL Code" formControlName="GLCode">
<mat-option *ngFor="let item of glMasterList" [value]="item.GLCode" (onSelectionChange)="onChange($event, item.GLDesc)">{{item.GLDesc}}</mat-option>
</mat-select> -->
<mat-autocomplete #auto1="matAutocomplete">
<mat-option
*ngFor="let gl of (filteredGlMasterList | async)"
[value]="gl.GLCode"
>
<span>{{ gl.GLDesc }}</span> |
</mat-option>
</mat-autocomplete>
<mat-error *ngIf="GLCode.invalid" style="color: red;">{{
GlCodeError()
}}</mat-error>
</mat-form-field>
'GLCode' 是 ID,'GLDesc' 是名称。你能请教如何纠正这个问题吗?谢谢你。
解决方案
用以下代码替换您的代码
<mat-option
*ngFor="let gl of (filteredGlMasterList | async)"
[value]="gl.GLDesc"
>
{{ gl.GLDesc }}
</mat-option>
看到这个 - https://material.angular.io/components/autocomplete/examples
推荐阅读
- python - 如何限制用户可以使用数字输入的内容?
- javascript - 您可以将填充框从左侧移开而不是在中间吗
- javascript - 将 TypeScript 对象预编译为变量
- sorting - 在 Google 表格中需要一个公式,该公式将返回与 Excel 公式相同的值
- php - PHP中公式中的IF条件
- c++ - Visual Studio 项目。运行 NVIDIA 光流示例
- java - 无法在端口 9001 连接到 MBean 服务器 - ApplicationReadyEvent 之后的运行状况检查
- python - 从文件中读取 TQDM 输出
- javascript - Discord.js 将所有消息转发给服务器所有者
- ios - 即使没有连接,ServerValue.timestamp() 也会工作吗?