如何使自动完成面板始终处于启用状态,而不必关注输入?我试图激活输入上的自动焦点,但是它并不干净,例如,当我按转义键时,面板就会消失。我还试图调用openPanel()函数,但它并不是在所有情况下都能工作,而且它仍然不是最优化的。
发布于 2022-08-30 01:16:22
在这种情况下,不建议使用自动完成材料。我建议您使用一个表,在该表中,我们可以使用箭头导航,单击结果等。
创建这样的表和搜索输入,并设置列名和数据
<input #searchbar
(keydown.arrowDown)="arrowDownEvent(row, selectedRowIndex)"
(keydown.arrowUp)="arrowUpEvent(row, selectedRowIndex)"
(keydown.enter)="submitSearch(searchbar.value)"
(focus)="selectedRowIndex=0" (focusout)="selectedRowIndex=undefined"
id="search-bar" placeholder="Search..."
required type="search">
<table mat-table [dataSource]="results" style="background-color: rgba(32, 32, 32); width: 100%">
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef> Name </th>
<td mat-cell *matCellDef="let result"><span>{{result.name}}<span></td>
</ng-container>
<!--You can add as many ng-containers as there are columns in your autocompletion results -->
<tr mat-header-row *matHeaderRowDef="displayedColumns; sticky: true"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns"
id="result.{{row.index}}"
[ngClass]="{'result': true, 'highlight': selectedRowIndex == row.index}"
(click)="submitSearch(row.name)">
</tr>
</table>然后将其添加到您的类型记录中,以便您可以控制表。
displayedColumns: string[] = ['name'];
selectedRowIndex: any = 0;
highlight(row: any){
(<HTMLInputElement>document.getElementById("search-bar")).value = row.name;
this.selectedRowIndex = row.index;
(<HTMLInputElement>document.getElementById("result."+this.selectedRowIndex)).scrollIntoView({block: 'end'});
}
arrowUpEvent(row: object, index: number){
if (index > 0) {
let nextRow = this.results[index - 1];
this.highlight(nextRow);
}
else {
let nextRow = this.results[this.results.length - 1];
this.highlight(nextRow)
}
}
arrowDownEvent(row: object, index: number){
if (index < this.results.length - 1) {
let nextRow = this.results[index + 1];
this.highlight(nextRow);
}
else {
let nextRow = this.results[0];
this.highlight(nextRow)
}
}最后,您可以将其添加到css中以修改所选元素的样式。
.result {
background-color: rgba(32, 32, 32);
cursor: pointer;
}
.result.highlight {
background: rgb(25, 25, 25);
}
.result:hover {
background: rgb(42, 42, 42);
}您的数据应该包含一个名为index的列,以便能够识别类型记录中的结果。
最后,您必须创建一个以用户的搜索项作为参数的submitSearch函数,该函数将定义搜索完成后执行的操作。
这里概述了您可以使用此方法做什么。

https://stackoverflow.com/questions/73536179
复制相似问题