You need to enable JavaScript to run this app. Vue.js中为动态对象添加Required必填校验并实现自定义错误提示
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js中为动态对象添加Required必填校验并实现自定义错误提示

解决方案

第一步:修正params的定义逻辑

你之前在computed中直接修改this.params的写法会触发死循环,应该把params定义为data中的响应式属性,通过watch监听平台字段的变化动态更新params内容:

data() {
  return {
    submitted: false,
    params: {}, // 把params放在data中声明为响应式数据
    // 原有其他数据如jsonS、tDetails等保留
  }
},
watch: {
  // 监听平台字段变化,动态更新params的字段
  'tDetails.platform'(newPlatform) {
    this.params = {}
    if (this.jsonS.hasOwnProperty(newPlatform)) {
      Object.entries(this.jsonS[newPlatform]).forEach(([key, value]) => {
        // Vue2环境需要用$set保证动态添加的属性是响应式的,Vue3可直接赋值
        this.$set(this.params, key, value)
      })
      // 更新params后重置校验,让Vuelidate加载新的校验规则
      this.$v.params.$reset()
    }
  }
}

第二步:动态生成params的校验规则

Vuelidate的validations配置支持函数返回值,你可以直接遍历当前params的所有键,动态生成必填校验规则:

import { required, minLength } from 'vuelidate/lib/validators' // 确保已导入需要的校验器

validations() {
  // 遍历params的键,动态生成每个字段的校验规则
  const paramsRules = {}
  Object.keys(this.params).forEach(key => {
    paramsRules[key] = { required }
    // 如果有其他自定义校验规则,可在这里根据key的类型按需添加
  })

  return {
    params: paramsRules, // 加上动态生成的params校验配置
    tDetails: {
      param1: { required, minLength: minLength(3) },
      param2: { required, minLength: minLength(3) },
      param3: { required, minLength: minLength(3) },
      param4: { required, minLength: minLength(2) },
      param5: { required, minLength: minLength(2) }
    }
  }
}

第三步:提交逻辑补充

表单提交时先触发全量校验,再控制错误提示显示:

methods: {
  submitForm() {
    this.$v.$touch() // 触发所有字段的校验
    this.submitted = true
    if (this.$v.$invalid) return // 校验不通过阻止提交
    // 校验通过后的提交逻辑
  }
}

你的模板代码无需修改,即可正常显示自定义的必填错误提示。

内容的提问来源于stack exchange,提问作者ItzikSpensive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 06:00:02