代码之家  ›  专栏  ›  技术社区  ›  Sumchans

在MatSelect上切换角度材质日期选择器单击并选择所选日期

  •  1
  • Sumchans  · 技术社区  · 7 年前

    我试图在单击angular mat select控件时自动打开材质日期选择器。

    <mat-select formControlName="postDate" (focus)="openCalendar(picker)" (click)="openCalendar(picker)">
      <mat-option value="8555"><i>Delay Crew - 8555</i></mat-option>
      <mat-option value="9000"><i>Self Install - 9000</i></mat-option>
      <mat-option>
        <mat-input-container>
          <input matInput [matDatepicker]="picker">
          <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
          <mat-datepicker #picker></mat-datepicker>
        </mat-input-container>
      </mat-option>
    </mat-select>
    

    我尝试了mat select控件的focus和click事件,但这种方式不起作用。

    openCalendar(datePicker: MatDatepicker<Date>) {
        datePicker.open();
    }
    

    也可以有人帮助选择,选择日期应该在mat select控件中选择该日期作为选项。

    1 回复  |  直到 7 年前
        1
  •  3
  •   bugs    7 年前

    自动打开 DatePicker select 元素,则可以修改html,如下所示:

    <mat-select formControlName="postDate" (click)="picker.open()">
        <mat-option value="8555"><i>Delay Crew - 8555</i></mat-option>
        <mat-option value="9000"><i>Self Install - 9000</i></mat-option>
        <mat-option>
            <mat-input-container>
                <input matInput [matDatepicker]="picker">
                <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
                <mat-datepicker #picker></mat-datepicker>
            </mat-input-container>
        </mat-option>
    </mat-select>
    

    这是可行的,但日历打开的位置错误,因为元素在 open() 方法已调用。我可能会考虑重新排列元素,这样就不必处理这个问题(即,将日期选择器移到select之外,并将其与之并排放置)。

    编辑

    再想一想,你可以打电话 picker.open() 当select元素发出 onOpen 事件,这将解决定位问题。

    <mat-select formControlName="postDate" (onOpen)="picker.open()">
        <mat-option value="8555"><i>Delay Crew - 8555</i></mat-option>
        <mat-option value="9000"><i>Self Install - 9000</i></mat-option>
        <mat-option>
            <mat-input-container>
                <input matInput [matDatepicker]="picker">
                <mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
                <mat-datepicker #picker></mat-datepicker>
            </mat-input-container>
        </mat-option>
    </mat-select>