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

vue + element ui: <el-from>表单用v-for动态渲染时 应该如何填写rules、prop 1.使用v-for渲染时 由于从后端获取到的对象是一个不固定长度的列表(会员等级),因此该字段只能通过v-for来实现 <el-form :model="productParam" ref="productPromotionForm" :rules="promotionRules" label-width="90px" size="small"> <el-form-item v-show="productParam.promotionType===2"> <div v- 阅读详情

这篇文章主要介绍了vue使用Element组件时v-for循环里的表单项验证方法,内容挺不错的,现在分享给大家,也给大家做个参考。

 

标题描述看起来有些复杂,有vue,Element,又有表单验证,还有v-for循环?是不是有点乱?不过我相信开发中遇到过此问题的同学,一看就明白我说的意思了。

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

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

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

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

<template>

 <p class="content-body">

  <el-form ref="form" :model="form" :rules="rules" label-width="120px">

   <el-row :gutter="10">

    <el-col :span="12" :offset="0">

     <el-form-item label="套餐名称:" prop="activityName" id="activityName">

      <el-input v-model="form.activityName"></el-input>

     </el-form-item>

    </el-col>

   </el-row>

   <el-row :gutter="10">

    <el-col :span="12">

     <el-form-item label="状态:">

      <el-radio v-model="form.status" label="1">上线</el-radio>

      <el-radio v-model="form.status" label="0">下线</el-radio>

     </el-form-item>

    </el-col>

   </el-row>

   <el-row :gutter="10">

    <el-col :span="2" style="width:120px;">

     <p class="sub-title">梯度设置:</p>

    </el-col>

    <el-col :span="20">

      <el-row :gutter="10" v-for="(item,index) in form.productGroup" :key="index">

       <el-col :span="6">

        <el-form-item label="商品数量:">

         <el-input v-model="item.num" type="number" size="small" style="width:80px;"></el-input>

        </el-form-item>

       </el-col>

       <el-col :span="6">

        <el-form-item label="优惠价格:">

          <el-input v-model="item.price" type="number" size="small" style="width:80px;"></el-input>

        </el-form-item>

       </el-col>

       <el-col :span="4">

        <i class="el-icon-remove-outline" @click="deleteLadder(index)"></i> 

        <i class="el-icon-circle-plus-outline" @click="addLadder" v-if="index==0"></i>

       </el-col>

      </el-row>

    </el-col>

   </el-row>

   <el-form-item size="medium" class="p-submit">

    <el-button @click="resetForm('form')">取消</el-button>

    <el-button type="primary" @click="submitForm('form')">提交</el-button>

   </el-form-item>

  </el-form>

 </p>

</template>

<script>

/* eslint-disable */

export default {

 data() {

  return {

   form: {

    activityName: '',

    status: '1',

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

   },

   rules: {

    activityName: [

     { required: true, message: '请输入套餐名称', trigger: 'blur' }

    ]

   }

  }

 },

 methods: {

  deleteLadder(index)

  {

   if(this.form.productGroup.length>1){

    this.form.productGroup.splice(index,1);

   }

  },

  addLadder()

  {

   this.form.productGroup.push({num:"",price:""});

  },

  submitForm(formName)

  {

   console.log("activityName...",this.form.activityName);

   this.$refs[formName].validate((valid,obj) => {

    if (valid) {

     this.submitFormAction();

    } else {

     this.$message.error("验证不通过");

    }

   });

  },

  submitFormAction()

  {

   this.$message.success("提交成功");

  },

  resetForm(formName)

  {

   this.$refs[formName].resetFields();

   this.form.productGroup = [{num:"",price:""}];

  }

 }

}

 

</script>

<style>

.el-form-item {

 margin-bottom: 20px;

}

</style>

 

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

 

1

2

3

4

productGroupRules: {

 productGroupNum: [{required: true, message: '请填写商品数量', trigger: 'blur'}],

 productGroupPrice: [{required: true, message: '请填写优惠价格', trigger: 'blur'}]

}

 

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

 

1

2

3

<el-form-item label="商品数量:" :prop="'productGroup.'+index+'.num'" :rules="productGroupRules.productGroupNum">

 <el-input v-model="item.num" type="number" size="small" style="width:80px;"></el-input>

</el-form-item>

 

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

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

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

 

1

2

3

4

5

6

7

8

9

10

11

12

form: {

 activityName: '',

 status: '1',

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

}

如果是:

 

form: {

 activityName: '',

 status: '1'

},

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

 

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

Vue使用Element-plus表单v-for校验规则问题 Vue使用Element-plus表单v-for循环校验规则 阅读详情

相关推荐

VS2103+Intel2013+MSMPI运行Fortran并行程序

VS2103+Intel2013+MSMPI运行Fortran并行程序MSMPI安装新建Fortran90项目编写Fortran并行程序在cmd运行编译完成的执行文件 MSMPI安装 我这里采用的是Microsoft MPI v9.0.1,可以点此下载。下载完成后同时安装msmpisdk.msi、msmpisetup.exe两个文件,安装位置默认即可。 其中msmpisdk.msi的默认安装路径在C:\Program Files (x86)\Microsoft SDKs\MPI,该文件包含了mpi环境所需

weixin_43176703的博客 2937

关于element ui表单组件在vue的v-for循环的校验规则以及prop的设置

关于element ui表单组件在vue的v-for循环的校验规则以及prop的设置,

Nancy的博客 4031

STM32 CubeMX LwIP + freertOS 移植

生成代码,烧录即可ping通。这里要注意的是,要修改freertOS的任务栈大小,默认128,修改为1024,不修改就跑不起来。生产代码,下载进开发板。开发板网口与电脑网口通过网线直连,设置电脑本地网卡在同一网段。在以上无系统的cubeMX配置下继续添加freertOS。无系统LWIP协议栈设置,静态IP地址,关闭DHCP。先用裸机测试LAN8742A的网卡驱动。MCU型号:STM32F746NGH。下面进行freertOS系统移植。网卡型号:LAN8742A。系统时钟和时基定时器如下。

u011625775的博客 1375

vue+Element项目中v-for循环+表单验证

如果在Form 表单里有通过v-for动态生成,如何设置验证呢?

TianXuab的博客 2496

Yolov5实现道路裂缝检测

Yolov5实现道路裂缝检测 参考代码链接 Github代码链接 基于Pytorch的Yolov5道路裂缝检测程序运行说明。大家可以结合我的说明和原文说明使用,有问题欢迎询问。 文章目录Yolov5实现道路裂缝检测环境要求测试训练自己的数据集1.创建dataset.yaml文件2.创建标签文件3.组织文件路径4.选择模型5.开始训练 环境要求 Python 3.8或之后的版本 还要安装requirements.txt文件中所有依赖包,包括1.7及以上版本的torch $ pip install -r req

qq_26751379的博客 2万+

DySAT+: Enhancing Dynamic Graph Representation Learning with Multi-Head Self-Attention and Temporal-

本文深入探讨了DySAT+模型在动态图表示学习中的创新应用,通过多头时空注意力机制和层级信息融合策略,有效解决了动态图数据中的时间维度信息捕捉和结构演变动态适应问题。该模型在社交网络异常检测和金融交易网络分析等场景中表现出色,显著提升了预测准确率和响应速度。

weixin_29035405的博客 337

vue中使用v-for实现两次嵌套循环,判断某子元素是否显示,进行复杂表单校验

有以下一个使用场景,名称111、名称222、名称333,是放在一个大数组里的,然后通过第一层for循环显示出来的。名称333数组里又包含自己的子数组,子数组再通过第二次for循环展示出来。当我们选择发放方式的时候,符合选择条件的只显示自己对应那一行的首发比例。最后对子数组里的每一项进行表单校验。

铁锤妹妹的博客 7783

HT7036计量芯片SPI通信与数据读取实战解析

本文详细解析HT7036计量芯片的SPI通信与数据读取实战,涵盖SPI时序配置、命令发送、数据读取及常见问题排查。重点介绍如何通过SPI接口与MCU通信,实现电能数据的稳定采集与处理,为智能电表等应用提供实用解决方案。

vscode5coder的博客 267

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

<template> <div class="content-body"> <el-form ref="form" :model="form" :rules="rules" label-width="120px"> <el-row :gutter="10"> <el-col :span="12" :offset="0"&gt...

扬帆前行 6760

立创开源桌面激光雕刻机DIY全解析:从悬臂结构、Arduino主控到Marlin固件

本文详细解析了基于立创开源平台的桌面激光雕刻机DIY全过程。重点介绍了悬臂式机械结构的设计与优化,阐述了采用Arduino Mega 2560主控与RAMPS 1.4扩展板的经典控制方案,并深入讲解了Marlin固件的关键配置步骤,包括电机步数计算与激光功能启用,为创客和电子爱好者提供了一套完整的从硬件搭建到软件调试的实战指南。

weixin_42510201的博客 387

[HQChart教程] 去掉“仅学习使用”文字提示的小技巧

最近用 HQChart 做图表时,发现左下角有“仅学习使用”的字样。这种水印虽然是默认的,但如果要展示给客户,可能会显得不够专业。还好,这个问题很好解决,只需要简单修改一下配置。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 599

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

需求是:在点击加号动态添加的,要在点击提交按钮的时候做校验,没值不能提交。 HTML代码: <span @click="addRow" style="border-radius:4px;cursor:pointer;color:#fff;font-size:12px;display:inline-block;margin-top:8px;background:#409EFF;paddin...

飞翔༒之翼 3001

1分钟了解LangChain是什么?

是一个基于大型语言模型(LLM)开发应用程序的框架, 它旨在简化语言模型应用的开发流程,特别是在构建对话系统和其他基于语言的AI解决方案时.目标是将复杂的语言模型技术转化为可通过简单API调用实现的功能,从而使开发者能够更加专注于创造性的解决方案设计。高效地解决了开发大语言模型应用的痛点问题。Langchain 最主要的特色是可以将 LLM 应用研发过程中的交互 Prompt、LLM 模型调用、语言模型与环境互动的自适应等方式融为一体。

gorgor在码农 2631

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

标题描述看起来有些复杂,有vue,Element,又有表单验证,还有v-for循环?是不是有点乱?不过我相信开发中遇到过此问题的同学,一看就明白我说的意思了。 首先Element组件有一套完善的表单验证方法,官方文档写的也很清楚:Element表单验证API,正常按照官方文档添加rules规则,需要验证的表单项设置prop,然后提交表单时通过form的validate方法验证表单项就可以了。 ...

wr1067145458的博客 1946

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

weixin_45102633的博客 2514

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Element UI表单循环校验实战:如何优雅处理动态增减表单项的验证问题

本文深入探讨了Element UI动态表单循环校验的实战技巧。针对动态增减表单项场景,核心在于正确理解并应用`prop`路径绑定机制,确保校验器能准确找到数组中的对应数据。文章详细解析了静态与动态绑定的本质区别,并提供了可维护的校验规则管理策略,包括规则复用、异步校验及交叉验证的实现方法。最后,通过封装可复用组件的高级实践,展示了如何优雅地解决企业级应用中的动态表单验证难题。

dream的博客 907

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

(element-ui)v-for动态数据循环表单验证的处理

1.功能需求 标题描述看起来有些复杂,有vue,Element,又有表单验证,还有v-for循环? 首先Element组件有一套完善的表单验证方法,官方文档写的也很清楚:Element表单验证API,正常按照官方文档添加rules规则,需要验证的表单项设置prop,然后提交表单时通过form的validate方法验证表单项就可以了。 如果表单项里有通过v-for动态生成的表单项,如何设置验证呢? ...

weixin_45178761的博客 1991

vue+Element项目中v-for动态数据循环表单验证的处理

1.功能需求 如果表单项里有通过v-for动态生成的表单项,如何设置验证呢? 2.Dom结构如下 表单验证的时候: prop改为 :prop,形式为’List.’+index+’.startDate’ List.’+index+’.startDate就是数据结构与数据 每一个循环中的都需要加:rules <el-form :model="resumes" size="mini" :rules="rules" ref="resumes"> <div v-for="(item, i

qq_33235680的博客 2834

element-UI框架下对v-for循环生成的表单项进行校验

需求比较简单就是验证一个表单,但是表单的项目是一个数组,每一个输入框都是v-for动态绑定的,其实和一个稳定的表单校验大部分要注意的点是一样的,只是一个问题prop的取值如何取比较复杂。 数据结构是这样的,routeTable中有俩个数组结构的子对象,而俩个数组中的元素结构又是一样的,而且业务逻辑也一样,所以将这两个数组分别传递给同一种子组件,并传递了key的句柄url-type。 ro...

CoderAllen的博客 3922

element ui使用v-for循环form表单校验的实现

<template> <el-form :model="dynamicValidateForm" ref="dynamicValidateForm" label-width="120px" class="demo-dynamic"> <el-row v-for="(domain, index) in dynamicValidateForm.pe...

qq_35859392的博客 6790

【vue+elementui】v-for循环生成的表单项、动态生成的表单项的校验

v-for循环生成的表单项、动态生成的表单项都有个特性,就是prop不确定,没有prop的话我们就无法像普通表单验证那样校验,所以我们要用:prop来校验。 语法: :prop="`v-for绑定的数组.${v-for的索引}.v-model绑定的变量`" 示例如下: <el-form :model="organForm" ref="organForm"> <el-card v-for="(item, idx) in organForm.organList" :key="idx"&gt

OG 3592

vue3 Element通过v-for循环渲染的form表单验证

在我们的业务开发中,有时候会经常遇到动态v-for循环渲染出el-form-item,那么这些动态生成的el-form-item如何来进行表单验证 <el-form :model="accountFormDatas" :inline="true" ref="accountFormRef" label-width="120px" :rules="rulesTwo"> <div> <el-form-item label="RFID">

山海也有意难平 4516

关于vue的UI框架Element,多层嵌套v-for循环下的表单验证

以下为一层嵌套 <el-form-item v-for="(item,itemIndex) in form.button" :key="item.itemIndex" label="一级菜单" > <el-form-item :prop="'button.'+ itemIndex + '.name'" :rules="rules.inputTxt"> <el-input v-model="item.name" style="

qq_26642611的博客 1775
上一篇: Leaflet调用谷歌地图、天地图、智图地图、高德题图一键搞定(转)
下一篇: 转换formdata参数格式
Uncle_long
博客等级 码龄10年 17粉丝 27原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值