【问题标题】:Input date manually and/or with a calendar vuetify手动输入日期和/或使用日历 vuetify
【发布时间】:2021-07-26 09:23:56
【问题描述】:

我对 Vuetify 还是很陌生。 我想了解是否可以使用 v-text-field 手动和/或使用日历 (v-date-picker) 插入日期。

我有一个带有内置 v-date-picker 的 v-text-field。如果我用日历插入日期,显然一切都很好。当我输入一个数字时,它会给我错误“时间值无效”(首先打开日历后,我注意到在我打开日历之前不会出现此错误)。

我的问题是,我必须手动处理这个错误还是有一些更实用的方法来修复(可能有一些道具)? 或者至少如果你能给我一些关于 v-date-picker 如何工作的建议,以便能够修改它对我有利。

编辑: 最后,对于 v-date-picker 进行的检查,无法在文本字段上手动写入,因为检查会在输入的第一个数字处立即开始。

由于支持 picker_date 变量,此设置可以在您的代码中的其他地方使用。这样,将有 n 个 text-field 变量和 1 个 v-date-picker 变量,用于修改主要变量(在其他方面,仅修改相关变量的 text-field 变量就足够了)。

我想插入解决方案:这样我既可以手写也可以使用日历。

                 <v-menu
                    v-model="menu_revoke_date1"
                    :close-on-content-click="false"
                    transition="scale-transition"
                    max-width="290px"
                    min-width="290px"
                  >
                    <template v-slot:activator="{ on }">
                      <v-text-field
                        color="secondary"
                        label="Data revoca"
                        hint="YYYY-MM-DD"
                        persistent-hint
                        v-model="revocated_at"
                        :error-messages="errors.revocated_at"
                        prepend-icon="mdi-calendar"
                        clearable
                        outlined
                        @blur="picker_date = parseDate(revocated_at)"
                        v-on="on"
                      ></v-text-field>
                    </template>
                    <v-date-picker first-day-of-week="1" v-model="picker_date"                           @change="revocated_at = picker_date" no-title                                 @input="menu_revoke_date1= false">
                    </v-date-picker>
                 </v-menu>
    parseDate(date){
      let validate_date = this.$moment(date)
      if (this.$moment(validate_date,'YYYY-MM-DD',true).isValid()) {
        return validate_date.format('YYYY-MM-DD')
      }
    },

【问题讨论】:

    标签: vue.js vuetify.js


    【解决方案1】:

    一种选择是使用第二个值来仅保存有效日期。在这里,当用户输入有效日期时,我们分配有效日期持有者,当日历更改时,我们同时分配两者。如果输入日期无效,您可以进行一些验证。

              <v-text-field
                 v-model="date_input"
                 @input="onInput"
                label="Regular"
              ></v-text-field>
        
        <v-date-picker v-model="valid_date" @change="dateChange"></v-date-picker>
    
    
    
    
            onInput(val){
              const newDate = moment(val);
              if (newDate.isValid()){
                this.valid_date = newDate.format('YYYY-MM-DD')
              }
            },
            dateChange(date){
              this.date_input = date
            }
    

    https://codepen.io/timfranklin/pen/vYmdEXM?editors=1011

    【讨论】:

    • 这个解决方案当然是有效的,它奏效了。最后我创建了变量,因为我只需要将一个变量发送到后端并在后端进行验证,我用一个简单的手表来解决它,当从日历中选择日期时更新我的​​第一个变量.因此,为 v-date-picker 创建的第二个变量仅用作更新我必须发送到后端的第一个(v-text-field)的支持。任何只使用一个变量的解决方案?因为我有很多类似的案例,我必须为同一个工作创建许多其他变量。
    • 是的,如果你想要 1 个变量,你可以在一个对象上做一个嵌套的 v-model,比如 calendar_input.valid_date 和 calendar_input.text_input。
    • 在这种情况下,考虑到您需要为每个新变量创建一个新的手表,您可能希望使用我上面的回调方法而不是观察者。
    • 谢谢蒂姆,你的例子真的帮助了我!我不知道图书馆的时刻,所以我花了一点时间把所有的部分放在一起,但最后我做到了。我决定改用模糊而不是输入,所以它只检查它何时失去文本字段的焦点。另外为了解决 1000 个变量的问题,我只创建了一个作为对所有其他变量的支持。基本上,当我手动编写或使用日历时,我总是更改支持变量,但是使用 v-date-picker 中的 @change 我只会更改相关的文本字段,因为它链接到它的变量
    • 好主意,很高兴我能帮上忙!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多