pra*_*999 6 javascript vue.js vuejs2 vuetify.js vuelidate
你们如何在Vuetify中进行验证?我无法绕过非常冗长的验证语法。
根据Vuetify的文档,我正在使用Vuelidate,这是我必须实现一个简单的必填字段的方法:
脚本:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
模板:
<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>
Run Code Online (Sandbox Code Playgroud)
我觉得很冗长。我做事的方式可能是错误的,有人可以告诉您您是如何做到这种极简主义或简朴的吗?
PS我来自Angular1背景,并且ng消息非常酷而且简单!
小智 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
}
Run Code Online (Sandbox Code Playgroud)
然后它可以在你的 Vue 对象中像这样使用:
...
computed: {
emailErrors () {
return handleErrors('email', this)
},
},
...
Run Code Online (Sandbox Code Playgroud)
然后你必须在handleError中处理可能的错误类型(示例中处理了必需的和电子邮件验证器)。我还用它来显示从后端返回的字段错误。
我也很好奇这个问题是否可以更容易地解决!