Привязка средства выбора v-даты к v-текстовому полю с отформатированной датой

Я пытаюсь привязать опцию выбора 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")
    }
}

Вы работаете с vue2/vuetify2 или vue3/vuetify3? Если вы используете vuetify 3, попробуйте заменить :value на :model-value в вашем v-текстовом поле.

Adri 29.04.2024 09:12

Vuetify 3. Не знаю почему, но когда я пробовал это раньше, это не сработало, но по какой-то причине теперь работает. Если вы укажете это как ответ, я отмечу как ответ.

Qiuzman 29.04.2024 13:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы работаете с 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-модели?

Qiuzman 29.04.2024 15:28

Поскольку v-модель является двусторонней привязкой, в этом случае вы просто хотите показать значение в текстовом поле, а обновление выполняется с помощью средства выбора v-даты (кроме того, v-модель не позволяет метод как значение)

Adri 29.04.2024 15:40

Это имеет смысл, и спасибо за это разъяснение. Я также заметил еще один связанный с этим элемент: @input = "ratingPeriodBeginMenu = false", похоже, ничего не делает. Изменилось ли это в vuetify 3, чтобы запретить автоматическое закрытие при выборе?

Qiuzman 29.04.2024 16:00

Попробуйте: @update:modelValue = "ratingPeriodBeginMenu = false"

Adri 29.04.2024 16:03

Я не знаю почему, но я изо всех сил пытаюсь выяснить, что работает в vuetify 3 и vuetify 2, так что спасибо вам за это.

Qiuzman 29.04.2024 18:15

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