Выбор даты материала всегда приводит к ошибке с моментом - PullRequest
0 голосов
/ 28 июня 2018

Почему-то я не могу применить пользовательский формат даты к своему материалу Datepicker. Я также попытался реализовать его так же, как это предлагается в Материал Datepicker

Должно быть, это слишком сложно и не работает ( Ошибка: Datepicker: значение должно быть либо объектом даты, распознанным DateAdapter, либо строкой ISO 8601. Вместо этого получил: 1525125600000 )

Я пытался использовать эту эталонную реализацию из этого стекового ответа . В результате та же ошибка. Это, очевидно, преобразование даты в метку времени, поэтому строка форматирования, кажется, применяется как ожидалось .... Также мне интересно, почему реализация угловых результатов приводит к одной и той же ошибке (с другой отметкой времени, потому что она использует текущую дату в качестве начальной позиции). Проблема в том, что я совершенно не знаю, где искать ошибку

Это мой .component.ts:

import {Component, Input, forwardRef} from '@angular/core';
import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';
import {MatDatepickerInputEvent} from '@angular/material/datepicker';
import {default as _rollupMoment} from 'moment';
import * as _moment from 'moment';

const DATEMOMENT = _rollupMoment || _moment;

@Component({
  selector: 'custom-date-picker',
  templateUrl: 'app/components/datepicker/datepicker.component.html',
  providers: [
    {
      provide: NG_VALUE_ACCESSOR,
      useExisting: forwardRef(() => DatePickerComponent),
      multi: true
    }
  ]
})
export class DatePickerComponent implements ControlValueAccessor {

  private tecDateValue: string = '28.05.1994';
  @Input() public dateFormat: string = 'dd.MM.yyyy';
  @Input() public placeholder: string;

  @Input()
  public get dateValue() {
    return DATEMOMENT(this.tecDateValue, this.dateFormat);
  }

  public set dateValue(val) {
    this.tecDateValue = DATEMOMENT(val).format(this.dateFormat);
    this.propagateChange(this.tecDateValue);
  }

  public addEvent(type: string, event: MatDatepickerInputEvent<Date>) {
    console.log(event.value);
    this.dateValue = DATEMOMENT(event.value, this.dateFormat);
  }

  public writeValue(value: any) {
    if (value !== undefined) {
      this.dateValue = DATEMOMENT(value, this.dateFormat);
    }
  }

  private propagateChange = (val: any) => {
  };

  public registerOnChange(fn: any) {
    this.propagateChange = fn;
  }

  public registerOnTouched() {
  }
}

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Я не мог найти правильное решение для этой проблемы. Я избавился от этой проблемы, просто скрыв поле ввода выбора даты и использовав вместо него материал запаса, а затем разделив входные данные. Хотя это не чистое решение, оно хотя бы работает.

0 голосов
/ 28 июня 2018

может быть, вы можете установить Locale на свой конструктор .. это работает для меня

constructor(private adapter: DateAdapter<any>) {
    this.adapter.setLocale('es');
}

надеюсь, что это было полезно :) 1004 *

...