【问题标题】:Angular Material DatePicker AutocompleteAngular Material DatePicker 自动完成
【发布时间】:2018-07-25 08:48:31
【问题描述】:

尝试实现一个搜索栏,您可以在其中按项目名称或日期进行搜索。只是想知道是否有办法禁用日期选择器自动完成功能?

问题是: - 如果我按日期搜索,没关系 - 如果我按名称搜索没关系...直到我失去搜索输入的焦点,然后它会自动完成一个日期

示例: 如果我搜索一个包含 1234 的项目并失去搜索输入的焦点,它将以 01/01/1234 完成并用它进行研究...

   <mat-form-field id="search">
      <input i18n-placeholder="Search@@searchBar" matInput placeholder="Search..."
      [matDatepicker]="picker" (dateInput)="searchDate($event)"  #input />
      <mat-icon matPrefix>search</mat-icon>
    </mat-form-field>

    <span>
      <mat-datepicker-toggle [for]="picker"></mat-datepicker-toggle>
      <mat-datepicker #picker ></mat-datepicker>
    </span>

也许我只是做错了...? 问候 j0w

【问题讨论】:

标签: angular autocomplete datepicker angular-material


【解决方案1】:

您应该创建一个隐藏输入,绑定到日期选择器,并在用户选择日期时更新自动完成的值。另一方面,第一个输入不应绑定到日期选择器,因为它是自动完成的。这是stackblitz example

toFormattedDate(iso: string) {
  const date = new Date(iso);
  console.log(date);
  return `${date.getDate()}/${date.getMonth() + 1}/${date.getFullYear()}`;
}
<mat-form-field>
  <input matInput #autocomplete placeholder="Choose a date">
  <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
  <mat-datepicker #picker></mat-datepicker>
</mat-form-field>

<input type="hidden" [matDatepicker]="picker" placeholder="Choose a date" (dateChange)="autocomplete.value = toFormattedDate($event.value)">

【讨论】:

  • 感谢@trichetriche 的回答!我使用来自import { formatDate } from '@angular/common' 的 `return formatDate(date, 'dd/MM/yyyy', 'fr-FR').toString();` 对其进行了一些修改,它似乎工作得很好!
  • 谢谢,这似乎是一个简单的方法。对我来说,就像在您的 stackblitz 示例中一样,问题在于 datepicker 弹出窗口位于位置 0,0 而不是输入字段下方。
  • @hgoebl 从未遇到过这种情况。如果您正在寻找解决方案,请通过minimal reproducible example 提出问题!
  • 这不是问题,只是评论。 stackblitz 已经是一个最小的可重现示例,用于在可见日期输入字段(Chrome 74、Win7)下不显示弹出窗口。我不需要采取任何行动。
  • 现在有人可以告诉我如何使用多种语言和多种日期格式来做到这一点吗?这对我不起作用。特别是我现在需要一个验证器来输入日期,如果用户可以输入日期
猜你喜欢
  • 2016-10-11
  • 2020-01-11
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 2018-10-19
  • 2018-02-26
  • 2019-10-14
  • 2015-12-29
相关资源
最近更新 更多