0

我正在尝试验证对象中的值字段是否包含电子邮件。一个数组中可能有许多这样的对象。当我评估它是否为 $dirty 时,它说 Value 未定义。验证也根本不起作用。我之前从未验证过对象数组,因为假设我访问数组中的数据错误,但我不确定

示例对象:值将包含我要验证的电子邮件

{
   option: null,
   Value: null,
   Environment: null
}

验证:

validations: {
    defaultFields: {
      $each: {
        Value: { email }
      }
    },
  }

自定义错误函数:这是在第一个 If 语句中引发错误的原因,但验证无法正常工作

computed: {
  emailErrors() {
      const errors = [];
      if (!this.$v.defaultFields.$each.Value.$dirty) return errors;
      !this.$v.defaultFields.$each.Value.email && errors.push('You must enter a valid email');
      return errors;
    }
}

这是循环的一个示例,循环中的字段我试图迭代并验证输入的内容是有效的电子邮件。

<v-form>
    <div v-for="(defaultField, defaultIndex) in defaultFields" v-bind:key="`${defaultIndex}-default`">
        <v-text-field
        @input="$v.defaultFields.$each[defaultIndex].Value.$touch()"
        @blur="$v.defaultFields.$each[defaultIndex].Value.$touch()"
        :error-messages="emailErrors(defaultIndex)"
        id="value"
        v-model="defaultField.Value"
        label="Email Address"
        type="email"
        ></v-text-field>
    </div>
</v-form>
4

2 回答 2

1

我正在尝试 Funkel 的方法。但它不起作用。但是,如果您像下面这样编写此电子邮件错误方法,则可以正常工作。除了 emailErrors 方法之外,一切都很好。

 methods: {
  emailErrors(defaultIndex) {
     const errors = [];
     if (!this.$v.defaultFields.$each[defaultIndex].Value.$dirty) return errors;
     !this.$v.defaultFields.$each[defaultIndex].Value.email && errors.push('You must enter a valid email');
  return errors;
}

}

于 2021-05-10T15:16:17.110 回答
0

所以我能够弄清楚这一点。我收到 defaultIndex 的方法

:error-messages="emailErrors(defaultIndex)"

位于计算的生命周期挂钩中。将其移至方法生命周期挂钩后,我能够传入索引并纠正了错误

<v-form>
    <div v-for="(defaultField, defaultIndex) in defaultFields" v-bind:key="`${defaultIndex}-default`">
        <v-text-field
        @input="$v.defaultFields.$each[defaultIndex].Value.$touch()"
        @blur="$v.defaultFields.$each[defaultIndex].Value.$touch()"
        :error-messages="emailErrors(defaultIndex)"
        id="value"
        v-model="defaultField.Value"
        label="Email Address"
        type="email"
        ></v-text-field>
    </div>
</v-form>


methods: {
  emailErrors() {
      const errors = [];
      if (!this.$v.defaultFields.$each.Value.$dirty) return errors;
      !this.$v.defaultFields.$each.Value.email && errors.push('You must enter a valid email');
      return errors;
    }
}
于 2019-11-11T19:12:16.240 回答