Могу ли я добавить ускорители для ввода даты в поле Angular Material Datepicker? - PullRequest
1 голос
/ 18 июня 2020

Я работаю над веб-приложением, используя Angular. Есть ли способ добавить ярлыки / ускорители к вводу даты? Например, пользователь должен иметь возможность ввести «+1» и разрешить ввод на завтрашний день. По крайней мере, я хотел бы иметь возможность установить для ввода «6-18» значение 6-18-2020 вместо 6-18-2001.

Я использую Angular 9 и Материал 8 .

1 Ответ

1 голос
/ 28 июля 2020

Вот как я решил это, если у кого-то такая же проблема. Это позволяет вводить даты через +1 (завтра), -1 (вчера), et c.

Я создал директиву ...

 export class DateEntryShortcutsDirective {
// form control bound to datepicker input
  @Input() control: FormControl;

  constructor() {}

// listen for change events on the datepicker input
  @HostListener('change', ['$event']) onChange(event: any) {
    this.setDate(event.target.value);
  }

  setDate(data) {
    if (typeof data === 'string' && data.length) {
// if values begins with '+' 
      if (data.substring(0, 1) === '+') {
// get current date and advance by however many days requested
        const dayDiff = +data.substring(1);
        const date = new Date(
          new Date().getTime() + dayDiff * 24 * 60 * 60 * 1000
        );
// set the control value to date 
        if (this.control) {
          this.control.setValue(date);
        }
      } else if (data.substring(0, 1) === '-') {
// if value begins with '-'
// get current day and subtract days 
        const dayDiff = +data.substring(1);
        const date = new Date(
          new Date().getTime() - dayDiff * 24 * 60 * 60 * 1000
        );
// set control to date
        if (this.control) {
          this.control.setValue(date);
        }
      }
    }
  }
}

Директива тогда используется так ...

<mat-form-field class="mat-form-field date items">
    <mat-label>Deliver NLT</mat-label>
    <input
      tabindex="{{ 80 + index * 1500 }}"
      matInput
      autocomplete="off"
      [matDatepicker]="receiverNLTDate"
      placeholder="Date NLT"
      formControlName="receiverNoLaterThanDate"
      (dateChange)="onReceiverNoLaterThanChanges()"
      [min]="
        this.data.reference.freightUnits[this.index]
          .receiverRequestedDeliveryDate
      "
      appDateEntryShortcuts
      [control]="receiverNoLaterThanDate"
      />
    <mat-datepicker-toggle
      matSuffix
      [for]="receiverNLTDate"
    ></mat-datepicker-toggle>
    <mat-datepicker #receiverNLTDate></mat-datepicker>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...