在 Angular Material 日期选择器中禁用特定日期

Disable particular dates in Angular Material Date picker

我正在为我的一个项目尝试 Angular 6 Material 个日期选择器。我需要禁用特定日期或让用户选择特定日期(可以是一些随机日期)。

<mat-card>
    <input matInput [matDatepicker]="picker" placeholder="Choose a date">
    <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
    <mat-datepicker #pickers></mat-datepicker>
    <app-date-picker></app-date-picker>
  </mat-card>
``

您必须使用日期验证:

https://material.angular.io/components/datepicker/overview#date-validation

因此您可以使用 minmax 属性或 matDatepickerFilter 来指定更多过滤器(可能更适合您的情况)。您可以查看上面 link 中的两个示例(第一个 minmax,第二个 matDatepickerFilter)。

可能其中一种方法是确定您的最短和最长日期。因此,在您的组件中,您可以将最小和最大日期设置为:

 minDate = new Date(2019, 0, 1); //minDate is 1st Jan 2019
 maxDate = new Date(2020, 0, 1); //maxDate is 1st Jan 2020

现在在您的模板中:

 <mat-form-field class="example-full-width">
   <input matInput [min]="minDate" [max]="maxDate" [matDatepicker]="picker" 
     placeholder="Choose a date">
   <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
   <mat-datepicker #picker></mat-datepicker>
 </mat-form-field>

这将允许用户 select 2019 年 1 月 1 日至 2020 年 1 月 1 日之间的任何日期,包括这两个日期。希望对您有所帮助。

如果需要过滤特定日期,您可以使用 matDatepickerFilter。 一个简单的例子是

dateFilter = (d: Date) => { return [1, 5, 10, 21].indexOf(+d.getDate()) == -1; };

并在模板中

<input matInput [matDatepicker]="picker" [matDatepickerFilter]=dateFilter>

stackblitz 中的工作演示:demo