Buefy DatePicker с Laravel: ожидаемая дата, получил строку

У меня есть форма, которая заполняется данными, полученными из запроса API к моему бэкэнду.

Я использую v-модель для привязки данных к полям (например):

<input type="text" v-model="fields.name">

Все работает просто отлично. Но когда дело доходит до Buefy datepicker, я получаю следующее предупреждение:

Недопустимая проп: проверка типа не выполнена для пропа "значение". Ожидаемая дата, получил строку.

Это правильно, так как это значение, которое я получаю от Laravel, это "2019-02-01 00:00:00". Я пытаюсь проанализировать эту строку для даты с помощью анализатора даты свойства Buefy, но безуспешно:

<b-datepicker
     :date-parser="(date) => new Date(Date.parse(date))"
     v-model="fields.budget_date"
     :first-day-of-week="1"
     placeholder="DD/MM/YYYY"
     name="order_date"
     editable>
</b-datepicker>

Обновить:

Это объект данных:

data() {
  return {
    csrf: document.querySelector('meta[name="csrf-token"]').content,
    fields: {},
    errors: {},
    success: false,
    loaded: true,
    loading: false,
}

Затем я использую Axios.get, чтобы получить данные с сервера и назначить их объекту полей следующим образом:

this.fields = response.data;

Вот как можно увидеть fields.budget_date в Vue DevTools:

Есть идеи как это побороть? Заранее спасибо.

1 ответ

У меня только была эта проблема в компоненте обертки вокруг Buefy's b-datepicker составная часть.

Решение может быть получено из ответа Христосанга, который должен передать начальное значение, заключенное в new Date(),

Мой тип опоры компонента-обертки выглядит так:

initialValue: {
    type: Date,
    required: false,
    default: () => undefined,
},

и это используется так:

<my-datepicker
    :initial-value="new Date(something.renews_on)"
></my-datepicker>

Я использую в основном реквизиты по умолчанию от b-datepicker, но мой компонент оболочки использует это:

<b-datepicker
    v-model="value"
    :initial-value="initialValue"
    :placeholder="placeholder"
    :name="name"
    :date-formatter="dateFormatter"
    :date-parser="dateParser"
    :date-creator="dateCreator"
    ... etc

...

dateFormatter: {
    type: Function,
    required: false,
    default: date => date.toLocaleDateString(),
},
dateParser: {
    type: Function,
    required: false,
    default: date => new Date(Date.parse(date)),
},
dateCreator: {
    type: Function,
    required: false,
    default: () => new Date(),
},

Вы можете исследовать реквизиты по умолчанию здесь: https://buefy.org/documentation/datepicker

Наконец-то разобрался.

Предупреждение довольно ясно: не используйте строку здесь, используйте объект Date.

Поэтому после получения ответа от сервера я проанализировал строковое значение в объекте Date и затем связал его с v-моделью:

this.fields.budget_date = new Date(this.fields.budget_date)

Так что теперь я получаю это в Vue DevTools:

Как вы можете видеть, budget_date имеет правильный формат даты, в отличие от create_at, который является строкой.

Функция парсера (: date-parser) дает вам правильный объект Date во время выбора даты пользователем.

Я хотел установить значение v-модели на основе данных, хранящихся в моей базе данных. И для работы b-datepicker должен быть объект Date, а не String.

Другие вопросы по тегам