前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0x00 概述

0x00 概述

作者头像
Jetpropelledsnake21
发布2022-10-31 13:59:10
5070
发布2022-10-31 13:59:10
举报
文章被收录于专栏:JetpropelledSnake

0x00 概述

本文主要记录VUE页面Element-UI表单校验中的多层嵌套处理。

0x01 Element-UI表单校验中多层嵌套

代码语言:javascript
复制
<el-row :gutter=20 class="with-bg" v-for="(product, idx) in productList" :key="product.id">
  <el-col :span="10">
    <el-form-item label="产品分类1" :prop="'productList.'+idx+'.productType'" :rules="[{required:true, message: '分类1不能为空', trigger: 'change' }]">
      <el-select clearable v-model="product.productType" placeholder="请选择产品分类1">
        <el-option v-for="param in getContent('PRODUCT_TYPE')"
                   :key="param.id"
                   :label="param.name"
                   :value="param.code"
        >
        </el-option>
      </el-select>
    </el-form-item>
  </el-col>
  <el-col :span="12">
    <el-form-item label="产品分类2" :prop="'productList.'+idx+'.subproductType'" :rules="[{required:true, message: '分类2不能为空', trigger: 'change' }]">
      <el-select clearable v-model="product.subproductType" placeholder="请先选产品分类2"
                 @change="value => effectMonthsHandler(value, idx)"
      >
        <el-option
          v-for="(item, index) in getContent('PRODUCT_SUB_TYPE').filter(r => r.parentParamId === (getContent('PRODUCT_TYPE').find(p => p.code === product.productType)||{}).id)"
          :key="index"
          :label="item.name"
          :value="item.code"
        />
      </el-select>
    </el-form-item>
  </el-col>
  <el-col :span="2">
    <a  v-if="editable && productList.length > 1" class="delete-item" @click="deleteproductItem(idx)"><i class="el-icon-delete"></i></a>
  </el-col>
</el-row>

以上productList列表内的每个product对象有两个属性,分别为productType和subproductType;

在form-item内绑定prop,按照:prop="'productList.'+index+'.product'"方法,代码冗余切没法绑定productType和subProductType的关系

代码语言:javascript
复制
data () {
  return {
    ...省略...
    punishList: [],
    ...省略...
    rules: {
      "productList.0.productType'": [{ required: true, message: '产品分类1不能为空', trigger: 'change' }],
      "productList.1.productType'": [{ required: true, message: '产品分类1不能为空', trigger: 'change' }],
      "productList.2.productType'": [{ required: true, message: '产品分类1不能为空', trigger: 'change' }],
      "productList.3.productType'": [{ required: true, message: '产品分类1不能为空', trigger: 'change' }],
      "productList.4.productType'": [{ required: true, message: '产品分类1不能为空', trigger: 'change' }],
      ...省略...
      "productList.0.subProductType'": [{ required: true, message: '产品分类2不能为空', trigger: 'change' }],
      "productList.1.subProductType'": [{ required: true, message: '产品分类2不能为空', trigger: 'change' }],
      "productList.2.subProductType'": [{ required: true, message: '产品分类2不能为空', trigger: 'change' }],
      "productList.3.subProductType'": [{ required: true, message: '产品分类2不能为空', trigger: 'change' }],
      "productList.4.subProductType'": [{ required: true, message: '产品分类2不能为空', trigger: 'change' }],
      ...省略...
    },
  }
},

0x02 将:rules放到template内,实现动态绑定

将:rules放到template内,rules内不用在写针对productList的验证规则。

代码语言:javascript
复制
<el-form-item label="产品分类1" :prop="'productList.'+idx+'.productType'" :rules="[{required:true, message: '分类1不能为空', trigger: 'change' }]">

0x03 参考

Vue 篇 解决ELement UI 中表单验证(多层Object嵌套)

vue elementUI 表单校验(多层嵌套)//终极版

Vue——rules动态判定require布尔值及1-255正则表达式

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 概述
  • 0x01 Element-UI表单校验中多层嵌套
  • 0x02 将:rules放到template内,实现动态绑定
  • 0x03 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档