Element-ui 中对表单(Form)绑定的对象中的对象属性进行校验

如果是直接绑定属性,是可以的,但是绑定对象中的属性就需要特别处理,需要在rules中添加双引号 " "或者''

  1. <template>
  2. <div class="about">
  3. <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
  4. <el-form-item label="活动名称" prop="name">
  5. <el-input v-model="ruleForm.name"></el-input>
  6. </el-form-item>
  7. <el-form-item label="活动区域" prop="region">
  8. <el-select v-model="ruleForm.region" placeholder="请选择活动区域">
  9. <el-option label="区域一" value="shanghai"></el-option>
  10. <el-option label="区域二" value="beijing"></el-option>
  11. </el-select>
  12. </el-form-item>
  13. // 注意这里
  14. <el-form-item label="活动形式" prop="activity.type">
  15. <el-input v-model="ruleForm.activity.type"></el-input>
  16. </el-form-item>
  17. <el-form-item>
  18. <el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
  19. <el-button @click="resetForm('ruleForm')">重置</el-button>
  20. </el-form-item>
  21. </el-form>
  22. </div>
  23. </template>
  24.  
  25. <script>
  26. export default {
  27. data() {
  28. return {
  29. ruleForm: {
  30. name: '',
  31. region: '',
  32. activity:{
  33. type:""
  34. }
  35. },
  36. rules: {
  37. name: [
  38. { required: true, message: '请输入活动名称', trigger: 'blur' },
  39. { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
  40. ],
  41. region: [
  42. { required: true, message: '请选择活动区域', trigger: 'change' }
  43. ],
  44. // 注意这里
  45. "activity.type": [
  46. { required: true, message: '请输入活动名称', trigger: 'blur' },
  47. { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
  48. ],
  49. }
  50. }
  51. },
  52. methods:{
  53. submitForm(formName) {
  54. this.$refs[formName].validate((valid) => {
  55. if (valid) {
  56. alert('submit!');
  57. } else {
  58. console.log('error submit!!');
  59. return false;
  60. }
  61. });
  62. },
  63. resetForm(formName) {
  64. this.$refs[formName].resetFields();
  65. }
  66. },
  67. }
  68. </script>

原文链接:https://blog.csdn.net/ZYS10000/article/details/107179238/

vue使用Element组件时v-for循环里的表单项验证方法

Element组件有一套完善的表单验证方法,官方文档写的也很清楚:Element表单验证API,正常按照官方文档添加rules规则,需要验证的表单项设置prop,然后提交表单时通过form的validate方法验证表单项就可以了。

然鹅问题来了,如果表单项里有通过v-for动态生成的表单项,如何设置验证呢?这个官方文档并没有明确的说法,我们通过查找解决方案和实际验证,总结出来解决方法如下。

首先是循环表单项没有加验证之前的代码:

  1. <template>
  2. <div class="content-body">
  3. <el-form ref="form" :model="form" :rules="rules" label-width="120px">
  4. <el-row :gutter="10">
  5. <el-col :span="12" :offset="0">
  6. <el-form-item label="套餐名称:" prop="activityName" id="activityName">
  7. <el-input v-model="form.activityName"></el-input>
  8. </el-form-item>
  9. </el-col>
  10. </el-row>
  11. <el-row :gutter="10">
  12. <el-col :span="12">
  13. <el-form-item label="状态:">
  14. <el-radio v-model="form.status" label="1">上线</el-radio>
  15. <el-radio v-model="form.status" label="0">下线</el-radio>
  16. </el-form-item>
  17. </el-col>
  18. </el-row>
  19. <el-row :gutter="10">
  20. <el-col :span="2" style="width:120px;">
  21. <div class="sub-title">梯度设置:</div>
  22. </el-col>
  23. <el-col :span="20">
  24. <el-row :gutter="10" v-for="(item,index) in form.productGroup" :key="index">
  25. <el-col :span="6">
  26. <el-form-item label="商品数量:">
  27. <el-input v-model="item.num" type="number" size="small" style="width:80px;"></el-input>
  28. </el-form-item>
  29. </el-col>
  30. <el-col :span="6">
  31. <el-form-item label="优惠价格:">
  32. <el-input v-model="item.price" type="number" size="small" style="width:80px;"></el-input>
  33. </el-form-item>
  34. </el-col>
  35. <el-col :span="4">
  36. <i class="el-icon-remove-outline" @click="deleteLadder(index)"></i>
  37. <i class="el-icon-circle-plus-outline" @click="addLadder" v-if="index==0"></i>
  38. </el-col>
  39. </el-row>
  40. </el-col>
  41. </el-row>
  42. <el-form-item size="medium" class="div-submit">
  43. <el-button @click="resetForm('form')">取消</el-button>
  44. <el-button type="primary" @click="submitForm('form')">提交</el-button>
  45. </el-form-item>
  46. </el-form>
  47. </div>
  48. </template>
  49. <script>
  50. /* eslint-disable */
  51. export default {
  52. data() {
  53. return {
  54. form: {
  55. activityName: '',
  56. status: '1',
  57. productGroup: [{num:"",price:""}]
  58. },
  59. rules: {
  60. activityName: [
  61. { required: true, message: '请输入套餐名称', trigger: 'blur' }
  62. ]
  63. }
  64. }
  65. },
  66. methods: {
  67. deleteLadder(index)
  68. {
  69. if(this.form.productGroup.length>1){
  70. this.form.productGroup.splice(index,1);
  71. }
  72. },
  73. addLadder()
  74. {
  75. this.form.productGroup.push({num:"",price:""});
  76. },
  77. submitForm(formName)
  78. {
  79. console.log("activityName...",this.form.activityName);
  80. this.$refs[formName].validate((valid,obj) => {
  81. if (valid) {
  82. this.submitFormAction();
  83. } else {
  84. this.$message.error("验证不通过");
  85. }
  86. });
  87. },
  88. submitFormAction()
  89. {
  90. this.$message.success("提交成功");
  91. },
  92. resetForm(formName)
  93. {
  94. this.$refs[formName].resetFields();
  95. this.form.productGroup = [{num:"",price:""}];
  96. }
  97. }
  98. }
  99.  
  100. </script>
  101. <style>
  102. .el-form-item {
  103. margin-bottom: 20px;
  104. }
  105. </style>

  首先是添加rules规则,这个和正常添加规则一样:

  1. productGroupRules: {
  2. productGroupNum: [{required: true, message: '请填写商品数量', trigger: 'blur'}],
  3. productGroupPrice: [{required: true, message: '请填写优惠价格', trigger: 'blur'}]
  4. }

  然后给表单项添加验证,以商品数量为例:

  1. <el-form-item label="商品数量:" :prop="'productGroup.'+index+'.num'" :rules="productGroupRules.productGroupNum">
  2. <el-input v-model="item.num" type="number" size="small" style="width:80px;"></el-input>
  3. </el-form-item>

  

注意这里:rules是每个表单项都要添加,有多个的话用productGroupRules.productGroupNum这样的形式区分,对应上面productGroupRules里的内容。

另外主要就是:prop了,注意正常验证表单项是prop,而这里是:prop
:prop="'productGroup.'+index+'.num'"是拼接的形式,前面是v-for绑定的数组,中间是数组索引index,最后是表单项绑定的v-model的名称,然后用点.把它们连接起来。这三项都必须保证正确,错一个都无法验证。

另外就是要注意,v-for绑定的数组也必须绑定在form对象里,注意上面的data里:

  1. form: {
  2. activityName: '',
  3. status: '1',
  4. productGroup: [{num:"",price:""}]
  5. }
  6. 如果是:
  7.  
  8. form: {
  9. activityName: '',
  10. status: '1'
  11. },

  

productGroup: [{num:"",price:""}]

是无法验证的,这一点也要注意。

好了,以上就是解决vue使用Element组件时v-for循环里的表单项验证的解决方案了,希望能帮助到遇到此问题的同学。

原文链接:https://www.cnblogs.com/shangxiaofei/p/9809025.html

Element-ui 中对表单进行验证的更多相关文章

  1. Vue 基于node npm & vue-cli & element UI创建vue单页应用

    基于node npm & vue-cli & element UI创建vue单页应用 开发环境   Win 10   node-v10.15.3-x64.msi 下载地址: https ...

  2. vue + element ui 阻止表单输入框回车刷新页面

    问题 在 vue+element ui 中只有一个输入框(el-input)的情况下,回车会提交表单. 解决方案 在 el-form 上加上 @submit.native.prevent 这个则会阻止 ...

  3. Element UI 中组件this.$message报错

    最近在做毕设的时候,用Element UI中的消息提示message一直报以下的错误: 展示的效果也不好看,没有图标什么的: 但我明明有在main.js引入了element-ui 呀,因为毕设时间很赶 ...

  4. 关于Element UI中页面样式小问题

    一,修改组件dialog窗口的大小 二,在我使用upload组件上传一张美女图片时,发现当预览图片时,图片是灰色的,点击一下才会变亮,这种效果使我很不舒服,于是我通过添加下面的一条样式,问题解决了(可 ...

  5. 关于Element UI中select组件中遇到的问题

    问题一:在使用select组件设置多选功能后,窗口抖动问题? 详细描述:在我使用select做多选的功能时出现了窗口抖动的问题,测试的时候发现,在有些人的电脑上抖动,有些人的电脑上不抖,找了很多文档, ...

  6. element ui 中的 resetFields() 报错'resetFields' of undefined

    每次做各种form表单时,首先要注意的是初始化,但是刚开始若没有仔细看文档,则会自己写个方法将数据设置为空,但是这样就会出现一个问题,表单内存在各种验证,假如是一个弹框内有form表单,弹框出现就执行 ...

  7. element ui form表单清空规则

    公司项目重构,经过商定使用element ui.在重构项目的时候发现一下element ui上很蛋疼的东西. 例如,这个form表单就是一个.趁着在高铁上没事,把想写的东西写一下. 先说一下eleme ...

  8. vue+element ui中select组件选择失效问题原因与解决方法

    codejing 2020-07-10 09:13:31  652  收藏 分类专栏: Web Vue Element UI 版权 .当表单form赋完值后,如果后续又对form中某一属性值进行操作如 ...

  9. element ui中的一些小技巧

    最近写公司的项目,这项目是vue和element ui搭建的, 做的是一套电力系统的管理平台.  遇到一个小麻烦,用过element ui 的都知道,使用element ui 弹框,点击空白处,默认是 ...

随机推荐

  1. Linux usb 1. 总线简介

    文章目录 1. USB 发展历史 1.1 USB 1.0/2.0 1.2 USB 3.0 1.3 速度识别 1.4 OTG 1.5 phy 总线 1.6 传输编码方式 2. 总线拓扑 2.1 Devi ...

  2. Flask WTForm disable choice field

    Flask disable choice field ChoiceField = { render_kw={'disabled':''} } form.my_field.render_kw = {'d ...

  3. Apache Hudi在华米科技的应用-湖仓一体化改造

    徐昱 Apache Hudi Contributor:华米高级大数据开发工程师 巨东东 华米大数据开发工程师 1. 应用背景及痛点介绍 华米科技是一家基于云的健康服务提供商,拥有全球领先的智能可穿戴技 ...

  4. python中整除后结果也是小数

    有人这么回答,这显然不对 先看个例子: '//'明明是整除,为什么结果不是整数,而会出现小数? 首先,关于除法有三种概念:传统除法.精确除法和地板除 #1.传统除法:整数相除结果是整数,浮点数相除结果 ...

  5. [loj6118]鬼牌

    枚举最终所有牌的大小$i$,对于最终所有牌大小都为$i$的情况,令其贡献为步数,否则令其贡献为0,记$F$为期望贡献(即所有情况概率*贡献之和),答案即为$\sum_{i=1}^{m}F$ 显然,$F ...

  6. 【Golang】基于beego/orm实现相同表结构不同表名的分表方法实现

    一.背景 在业务场景开发的过程中, 随着数据量的增加,相同表结构不同表名的分表策略是常用的方案选择之一.如下以golang做为后端业务开发,尝试修改beego的orm库做一个相同表结构不同表名的分表实 ...

  7. 2017Java前景怎么样?

    当今社会互联网软件行业属于高薪技术行业,伴随着互联网的发展Java在Web领域的优势也日渐凸显,并且java语言本身就应用最广泛,最高效.据说,全球有25亿Java器件运行着Java,450多万Jav ...

  8. 『学了就忘』Linux文件系统管理 — 59、使用fdisk命令进行手工分区

    目录 1.手工分区前提 (1)要有一块新的硬盘 (2)在虚拟机中添加一块新硬盘 2.手工分区 (1)查看Linux系统所有硬盘及分区 (2)手工分区:详细步骤 (3)保存手工分区 3.硬盘格式化 4. ...

  9. 洛谷 P6783 - [Ynoi2008] rrusq(KDT+势能均摊+根号平衡)

    洛谷题面传送门 首先显然原问题严格强于区间数颜色,因此考虑将询问离线下来然后用某些根号级别复杂度的数据结构.按照数颜色题目的套路,我们肯定要对于每种颜色维护一个前驱 \(pre\),那么答案可写作 \ ...

  10. 洛谷 P6072 -『MdOI R1』Path(回滚莫队+01-trie)

    题面传送门 又是 ix35 神仙出的题,先以 mol 为敬 %%% 首先预处理出根节点到每个点路径上权值的异或和 \(dis_i\),那么两点 \(a,b\) 路径上权值的异或和显然为 \(dis_a ...