ngx-mat-datetime-picker в angular / REST-приложении не обновляет значение с помощью пользовательского DateAdapter - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь использовать ngx-mat-datetime-picker в приложении angular .io с пользовательским адаптером даты, основанным на этом gist . Мое приложение обращается к REST-API, в котором есть элементы с полем datetime в формате 2020-01-08T01:02:03.000Z.

{ "idxdevice": 123, "devname": "test", "devoutdated": "2020-05-01T09:42:27.281Z" }

. После извлечения элемента я преобразую его в JavaScript -Date-Element в detail-component s get () - Метод:

get(): void {
  const idxdevice = +this.route.snapshot.paramMap.get('idx');
  this.deviceService.getDevice(idxdevice).subscribe(device => {        
    this.device = device;
    this.device.devoutdated = new Date(device.devoutdated)
  });
}

Мое поле ввода во внешнем интерфейсе выглядит так:

<mat-form-field class="detail-form-field">
  <mat-label>Outdated since</mat-label>
  <input matInput [ngxMatDatetimePicker]="datetimepicker" [value]="device.devoutdated" (input)="device.devoutdated = $event.target.value" />
  <mat-datepicker-toggle matSuffix [for]="datetimepicker"></mat-datepicker-toggle>
  <ngx-mat-datetime-picker #datetimepicker></ngx-mat-datetime-picker>
</mat-form-field>

DATE_FORMAT для адаптера даты выглядит следующим образом

export const MAT_DATE_FNS_DATE_FORMATS = {
  parse: {
    dateInput: 'dd.MM.yyyy HH:mm:ss',
  },
  display: {
    dateInput: 'dd.MM.yyyy HH:mm:ss',
    monthYearLabel: 'LLL y',
    dateA11yLabel: 'MMMM d, y',
    monthYearA11yLabel: 'MMMM y',
  }
};

Если я открою браузер, результат в поле ввода будет ожидаемым. Теперь, если я изменяю дату и время в поле ввода с помощью средства выбора даты (на самом деле, изменение значений с помощью клавиатуры очищает поле ввода и не позволяет мне вставлять ничего, кроме иногда одного числа), PUT-запрос обратно на сервер содержит " предыдущий "datetime, а не тот, который я выбрал в поле ввода.

С моей точки зрения, поле devoutdated не обновляется при изменении даты (но оно работает для других полей, таких как * 1022). *). Мое первое предположение состоит в том, что это как-то связано с полем Date, которое следует преобразовывать обратно в строку при обращении к API. Но с другой стороны, я думаю, что это другая проблема, не связанная с обновлением поля, которая должна быть покрыта адаптером даты.

Есть предложения, что вызывает эту проблему?

...