Я пытаюсь привязать опцию выбора v-даты к текстовому полю v с отформатированными данными. У меня есть функция, которую я уже использую в своем приложении, под названием formateDate(), и я пытаюсь применить ее к значению v-текстового поля с v-моделью средства выбора даты в качестве входных данных. Когда загружается v-меню и загружается исходное значение, в текстовом поле v отображается отформатированная дата, но как только я выбираю опцию в средстве выбора v-даты, значение очищается и ничего не отображается. Ошибок тоже не вырисовывается. Вот мой код:
<v-menu v-model = "ratingPeriodBeginMenu"
:close-on-content-click = "false"
transition = "scale-transition"
offset-y
max-width = "290px"
min-width = "auto">
<template v-slot:activator = "{ props }">
<v-text-field
v-bind = "props"
label = "Rating Period Begin Date"
:value = "formatDate(ratingPeriodBeginModel,'MM/DD/YYYY')?.toString()"
prepend-inner-icon = "mdi-calendar"
variant = "outlined"/>
</template>
<v-date-picker
v-model = "ratingPeriodBeginModel"
color = "primary"
no-title
@input = "ratingPeriodBeginMenu = false">
</v-date-picker>
</v-menu>
И моя функция, которую я использую, заключается в следующем:
export function formatDate(inputDate : Date | null, formatType : string) {
if (inputDate == null) return null;
if (formatType == 'MM/DD/YYYY'){
const date = new Date(inputDate)
return date.toLocaleDateString("en-US")
}
}
Vuetify 3. Не знаю почему, но когда я пробовал это раньше, это не сработало, но по какой-то причине теперь работает. Если вы укажете это как ответ, я отмечу как ответ.





Если вы работаете с Vuetify 3, попробуйте заменить :value вашего v-текстового поля на :model-value:
<v-menu v-model = "ratingPeriodBeginMenu"
:close-on-content-click = "false"
transition = "scale-transition"
offset-y
max-width = "290px"
min-width = "auto">
<template v-slot:activator = "{ props }">
<v-text-field
v-bind = "props"
label = "Rating Period Begin Date"
:model-value = "formatDate(ratingPeriodBeginModel,'MM/DD/YYYY')?.toString()"
prepend-inner-icon = "mdi-calendar"
variant = "outlined"/>
</template>
<v-date-picker
v-model = "ratingPeriodBeginModel"
color = "primary"
no-title
@input = "ratingPeriodBeginMenu = false">
</v-date-picker>
</v-menu>
Почему vuetify 3 использует в своих примерах значение модели вместо v-модели?
Поскольку v-модель является двусторонней привязкой, в этом случае вы просто хотите показать значение в текстовом поле, а обновление выполняется с помощью средства выбора v-даты (кроме того, v-модель не позволяет метод как значение)
Это имеет смысл, и спасибо за это разъяснение. Я также заметил еще один связанный с этим элемент: @input = "ratingPeriodBeginMenu = false", похоже, ничего не делает. Изменилось ли это в vuetify 3, чтобы запретить автоматическое закрытие при выборе?
Попробуйте: @update:modelValue = "ratingPeriodBeginMenu = false"
Я не знаю почему, но я изо всех сил пытаюсь выяснить, что работает в vuetify 3 и vuetify 2, так что спасибо вам за это.
Вы работаете с vue2/vuetify2 или vue3/vuetify3? Если вы используете vuetify 3, попробуйте заменить :value на :model-value в вашем v-текстовом поле.