【问题标题】:Search field loses focus搜索字段失去焦点
【发布时间】: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


【解决方案1】:

您能否提供一个代码示例来重现问题?

我已按照教程的说明进行操作,一切似乎都正常。

检查工作示例HERE

更新

问题出在

<button mat-menu-item...

在按钮上使用 ma​​t-input-item 属性时,焦点输入字段出现问题。

如果您将 ma​​t-input-item 替换为 ma​​t-button,从现在开始焦点将保持不变。

更新示例 here

【讨论】:

  • 我已经更新了我的问题以更符合我的实际代码
  • 感谢您的复制链接,我也更新了我的答案。
  • 也可以通过添加class="mat-menu-item"和删除mat-menu-item作为属性来解决...即&lt;button class="mat-menu-item"&gt;
猜你喜欢
  • 1970-01-01
  • 2023-01-27
  • 2023-02-04
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多