Vue.js 将Vuelidate与Nuxt一起使用-即使满足条件,也要看到错误

Vue.js 将Vuelidate与Nuxt一起使用-即使满足条件,也要看到错误,vue.js,nuxt.js,vuelidate,Vue.js,Nuxt.js,Vuelidate,我正在尝试将Vuelidate用于我的Nuxt项目。因此,我安装了Vuelidate包,然后在创建的Vuelidate.js文件夹中: 并在numxt.config.js 顺便说一句,在没有模式的情况下尝试了它,只使用字符串数组-结果相同 现在,在我的组件中有以下(Vuetify)文本字段: <v-text-field id='firstName' v-model='formData.firstName' label='First Name' name='firstNa

我正在尝试将Vuelidate用于我的Nuxt项目。因此,我安装了Vuelidate包,然后在创建的
Vuelidate.js
文件夹中:

并在
numxt.config.js

顺便说一句,在没有
模式的情况下尝试了它,只使用字符串数组-结果相同

现在,在我的组件中有以下(Vuetify)文本字段:

<v-text-field
  id='firstName'
  v-model='formData.firstName'
  label='First Name'
  name='firstName'
  prepend-icon='person'
  type='text'
  :error-messages='firstNameErrors'
  @blur='$v.formData.firstName.$touch'
  @input='$v.formData.firstName.$touch'
/>
我的代码的其余部分:

所以我试图验证firstName至少有2个字符。当我开始打字时,我确实看到了错误消息,但在输入2个或更多字符时,错误仍然存在

我试图在computed属性中控制台log
this.$v.formData
,但一旦加载组件并开始键入,它就会被打印出来。如果我检查记录的对象,我确实看到
this.$v.formData.firstName.$model
有2个以上的字符,但无论我尝试做什么,我仍然会看到错误(例如在输入时再次调用
$touch
之前调用
$reset
,将
firstNameErrors
作为方法而不是计算方法等等)


同样的代码在我的Vue项目中也适用于我,但这是我第一次使用Nuxt,我不知道为什么这段代码停止工作。我遗漏了什么?

如果你使用
v-model='$v.formData.firstName.$model'
?@DavidWeldon相同的结果…你的nuxt设置与我的相同,因此我们可以从列表中删除它。其他可能存在问题的事情:您将
formData
作为道具,您的模型是嵌套的,您将它与
Vuetify
一起使用。我建议通过创建一个包含非嵌套组件数据的简单表单和一个
来调试它。如果这样做有效,尝试重新添加内容,直到它中断。“我知道这是一个很大的工作,但你们这里有很多移动的部件。”戴维德维尔顿,好吧,我会尽力做到的。明天会报告进展情况。。。谢谢@戴维德维尔顿嗯,显然我传递的
formData
不正确。一旦修复,一切都很好!谢谢这件事让我发疯了。。。
plugins: [
  {src: '~/plugins/directives.js'},
  {src: '~/plugins/vuelidate.js', mode: 'client'}
],
<v-text-field
  id='firstName'
  v-model='formData.firstName'
  label='First Name'
  name='firstName'
  prepend-icon='person'
  type='text'
  :error-messages='firstNameErrors'
  @blur='$v.formData.firstName.$touch'
  @input='$v.formData.firstName.$touch'
/>
import { validationMixin } from 'vuelidate'
import {
  required,
  minLength,
} from 'vuelidate/lib/validators'
export default {
    name: 'AuthForm',
    mixins: [validationMixin],
    validations: {
      formData: {
        firstName: {
          /*required: requiredIf(function() {
            return !this.isLogin
          }),*/
          minLength: minLength(2)
        },
    },
    props: {
      formData: {
        type: Object,
        required: true,
        default: () => {}
      }
    },
    computed: {
      firstNameErrors() {
        const errors = []

        if (!this.$v.formData.firstName.$dirty) {
          return errors
        }

        !this.$v.formData.firstName.minLength && errors.push('First name must be at least 2 characters long')

        // !this.$v.formData.firstName.required && errors.push('First name is required')
        return errors
      }
    }
  }