如何在 mat-datepicker 上仅选择年份

wal*_*ili 6 angular-material angular8 mat-datepicker

您好,我正在开发一个带有 angular 8 的应用程序,其中我有一个仅包含年份编号的输入。我使用过 mat-datepicker 并且只想选择年份。

<mat-form-field class="input-control">
      <input matInput placeholder="{{'enter'|translate}}.." [formControl]="form.controls.openedAt"
             [matDatepicker]="date" readonly>
      <mat-datepicker-toggle matSuffix [for]="date"></mat-datepicker-toggle>
      <mat-datepicker #date startView="multi-year"></mat-datepicker>
    </mat-form-field>
Run Code Online (Sandbox Code Playgroud)

此代码首先显示年视图,但是当我选择年份时,将打开月视图,然后打开天视图。

那么如何在 mat-datepicker 上仅选择年份或仅显示年份视图?

小智 10

我确实喜欢这样(支持 Angular 14):

组件.html:

<mat-form-field appearance="outline">
    <mat-label>Ano</mat-label>
    <input [(ngModel)]="selectYear" [formControl]="dateForm" matInput [matDatepicker]="picker" />
    <mat-datepicker-toggle matSuffix [for]="picker" ></mat- datepicker-toggle>
    <mat-datepicker #picker startView="multi-year" (yearSelected)="chosenYearHandler($event, picker)">
    </mat-datepicker>
</mat-form-field>
Run Code Online (Sandbox Code Playgroud)

组件.ts:

export const MY_FORMATS = {
  parse: {
    dateInput: 'YYYY',
  },
  display: {
    dateInput: 'YYYY',
    monthYearLabel: 'YYYY',
    monthYearA11yLabel: 'YYYY',
  },
};

@Component({
    providers: [
    {
      provide: DateAdapter,
      useClass: MomentDateAdapter,
      deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS]
    },
    { 
     provide: MAT_DATE_FORMATS, useValue: MY_FORMATS
    },
   ]
})

export class MainFormComponent implements OnInit {

    @ViewChild('picker', { static: false })
    private picker!: MatDatepicker<Date>;  

    chosenYearHandler(ev, input){
      let { _d } = ev;
      this.selectYear = _d;
      this.picker.close()
    }
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好而且非常简单!!!


Tus*_*har 8

此功能尚未完全实现。你可以在这里看到:

https://github.com/angular/components/issues/4853

现在你可以试试这个:

https://stackblitz.com/edit/angular-mulitdate-picker-demo