【发布时间】:2020-01-22 21:49:59
【问题描述】:
我想创建一个搜索字段,为此我关注了this tutorial,它展示了如何创建和使用过滤管道。
@Pipe({
name: 'filter'
})
export class FilterPipe implements PipeTransform {
transform(items: any[], searchText: string): any[] {
if(!items) return [];
if(!searchText) return items;
searchText = searchText.toLowerCase();
return items.filter( it => {
return it.toLowerCase().includes(searchText);
});
}
}
<mat-menu #accountsMenu="matMenu">
<div (click)="$event.stopPropagation()">
<mat-form-field>
<span matPrefix><mat-icon>search</mat-icon></span>
<input
matInput
[formControl]="accountSearch"
placeholder="search text goes here"
/>
</mat-form-field>
<button
*ngFor="let c of accounts | arrayFilter: accountSearch.value"
mat-menu-item
(click)="selectAccount(c)"
>
{{ c.Name }}
</button>
</div>
</mat-menu>
<div
[matMenuTriggerFor]="accountsMenu"
>
Click to show menu
</div>
过滤有效,但搜索字段失去焦点。我尝试使用 trackBy,因为它是由一些消息来源建议的,但它对我不起作用。
更新:我发现当我从按钮中删除“mat-menu-item”时,输入不会失去焦点,但我需要它。我该怎么办?
更新 2:可复制问题here
【问题讨论】:
-
您需要使用一些在线编辑器应用程序(如 stackblitz 或其他)重现问题。如果您不重现问题,我无法帮助您。此外,您应该通知我们您正在使用角材料。 stackoverflow.com/help/how-to-ask
-
mat-menu-item on button 必须放在
标签内,并且需要使用带有 [matMenuTriggerFor]="menu" 的外部按钮调用。参考这里:material.angular.io/components/menu/overview -
@ThemistoklisBogiatzoglou 它被放置在 mat-menu 标签内。我在问题中添加了 stackblitz 的链接
标签: angular typescript angular-material