validation - 如何在 vuelidate 中动态设置验证字段

标签 validation vue.js vuejs2 vuetify.js vuelidate

我将 VueJS2 与 vuelidate 一起使用图书馆。我可以根据验证对象验证字段。验证将在计算的时间内执行。但是我的验证对象是固定的,而不是动态的。我有一些字段会根据选择隐藏。

import { validationMixin } from 'vuelidate'
import { required, maxLength, email } from 'vuelidate/lib/validators'

export default {
mixins: [validationMixin],
validations: {
  company_name: { required },
  company_position_title: { required }
},
methods: {
  submit(){
    this.$v.touch();
    if(this.$v.$invalid == false){ 
      // All validation fields success
    }
  }
}
}

HTML

<v-select
  label="Who are you?"
  v-model="select" // can be 'company' or 'others'
  :items="items"
  :error-messages="selectErrors"
  @change="$v.select.$touch();resetInfoFields();"
  @blur="$v.select.$touch()"
  required
></v-select>

<v-text-field
  label="Company Name"
  v-model="company_name"
  :error-messages="companyNameErrors"
  :counter="150"
  @input="$v.companyName.$touch()"
  @blur="$v.companyName.$touch()"
  v-show="select == 'Company'"
></v-text-field>

<v-text-field
  label="Company Position Title"
  v-model="company_position_title"
  :error-messages="companyPositionErrors"
  :counter="150"
  @input="$v.companyPosition.$touch()"
  @blur="$v.companyPosition.$touch()"
  v-show="select == 'Company'"
></v-text-field>

<v-btn @click="submit">submit</v-btn>

问题

当我选择“其他”选项并单击提交时,this.$v.$invalid 仍然为真。它应该是假的,因为不需要验证字段。 当我选择“公司”时,这两个字段必须是必填字段并经过验证。

最佳答案

你需要一个动态验证模式

validations () {
  if (!this.select === 'company') {
    return {
      company_name: { required },
      company_position_title: { required }
    }
  }
}

更多信息:Dynamic validation schema

关于validation - 如何在 vuelidate 中动态设置验证字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47250791/

相关文章:

validation - EmailAddressAttribute 如何工作?

javascript - 在 Vue js 中将函数作为 prop 传递以获取数据

vue.js - 如何更新 vuetify mdi 图标? (Nuxt.js)

javascript - 将新项目附加到 Vue 2 中的列表

jquery - 输入验证 - 样式

ruby-on-rails - Rails 中的字符串输入日期错误消息

javascript - AngularJS 表单验证不适用于指令

vue.js - 在组件和 Axios 中使用时如何使数据工作?

javascript - 如何将 Jitsi Meet 添加到 Vuejs

javascript - 动态组件: React vs Vue