【问题标题】:managing vuelidate validations in vuetify在 vuetify 中管理 vuelidate 验证
【发布时间】:2018-01-31 05:01:05
【问题描述】:

你们如何在 Vuetify 中进行验证? 我无法理解非常冗长的验证语法。

我正在使用 Vuelidate,根据 Vuetify 的文档,我必须实现一个简单的必填字段:

脚本:

import { required } from 'vuelidate/lib/validators';

computed: {
    userNameErrors() {
      const errors = []
      if (!this.$v.loginForm.userName.$dirty) {
        return errors
      }
      !this.$v.loginForm.userName.required && errors.push('This field is required')
      return errors
    }
},
validations: {
    loginForm: {
      userName: {
        required
      }
    }
  }

模板:

 <v-text-field :label="Username"
                    prepend-icon="account_circle"
                    v-model="loginForm.userName"
                    :error-messages="userNameErrors"
                    @input="$v.loginForm.userName.$touch()"
                    @blur="$v.loginForm.userName.$touch()"
                    :required="true"></v-text-field>

我觉得很啰嗦。我可能做错了,谁能告诉你这个极简主义或短手是怎么做的?

【问题讨论】:

    标签: javascript vue.js vuejs2 vuetify.js vuelidate


    【解决方案1】:

    我只是在这里提出建议,但使用 vuelidate-errors-extractor 会更简单一些

    【讨论】:

      【解决方案2】:

      我想出了以下处理通用验证的解决方案:

      function handleErrors(fieldName, vueObj) {
        const errors = []
        if (!vueObj.$v[fieldName].$dirty) return errors
        if ('email' in vueObj.$v[fieldName]) {
          !vueObj.$v[fieldName].email && errors.push('This email address is invalid')
        }
        if ('required' in vueObj.$v[fieldName]) {
          !vueObj.$v[fieldName].required && errors.push('This field is required')
        }
        if (fieldName in vueObj.serverErrors) {
          vueObj.serverErrors[fieldName].forEach(error => {
            errors.push(error)  
          });
        }
        return errors
      }
      

      那么就可以在你的 Vue 对象中这样使用:

      ...
      computed: {
          emailErrors () {
            return handleErrors('email', this)
          },
        },
      ...
      

      然后您必须在 handleError 中处理可能的错误类型(在示例中处理必需和电子邮件验证器)。我也用它来显示从后端返回的字段错误。

      我也很好奇这是否可以更容易解决!

      【讨论】:

      • 感谢您的回答,但不是我所期待的。这是通用函数,但不能处理嵌套验证。我期待一些 vue 指令或任何自动处理此类情况的东西。正如 ng-messages 所做的那样(如果你已经看过),无论如何我会尝试想出一些解决方案
      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多