Vue+Element实现动态生成新表单并添加验证功能


Posted in Javascript onMay 23, 2019

首先有一个这样的需求,表单中默认有一个联系人信息,用户可以再添加新的联系人信息

Vue+Element实现动态生成新表单并添加验证功能

点击添加更多联系人之后

Vue+Element实现动态生成新表单并添加验证功能

官方文档中有写用v-for来实现新增表单,但是那是单表单的新增,现在多表单的新增,可以考虑的实现方法是先写死一个必须的表单,需要新增的两个表单放在一个div里,在div中使用v-for生成,达到同时新增的效果

代码如下

//必填一个联系人的表单
<el-form-item class="rules" label="通知对象:" prop="notifyobject">
      <el-input v-model="ruleForm.notifyobject" placeholder="请输入联系人名称" :disabled="isReadonly" class="el-select_box"></el-input>
     </el-form-item>
     <el-form-item class="rules" label="邮箱:" prop="email">
      <el-input v-model="ruleForm.email" placeholder="请输入邮箱" :disabled="isReadonly" class="el-select_box"></el-input>
     </el-form-item> 
//动态生成的联系人表单
     <div class="moreRules">
      <div class="moreRulesIn" v-for="(item, index) in ruleForm.moreNotifyObject" :key="item.key">
       <el-form-item class="rules" label="通知对象:" :prop="'moreNotifyObject.' + index +'.notifyobject'" :rules="moreNotifyOjbectRules.moreNotifyOjbectName">
        <el-input v-model="item.notifyobject" placeholder="请输入联系人名称" :disabled="isReadonly" class="el-select_box"></el-input>
       </el-form-item>
       <el-form-item class="rules" label="邮箱:" :prop="'moreNotifyObject.'+ index +'.email'" :rules="moreNotifyOjbectRules.moreNotifyOjbectEmail">
        <el-input v-model="item.email" placeholder="请输入邮箱" :disabled="isReadonly" class="el-select_box"></el-input>
       </el-form-item>
       <el-button @click="deleteRules(item, index)" :disabled="isReadonly">删除</el-button>
      </div>
     </div>
     <el-form-item v-show="!isRead">
      <el-button type="text" class="addUser" @click="addUser" :disabled="isReadonly"><i class="iconfont icon-tianjialianxiren"></i>添加更多联系人</el-button>
     </el-form-item>

和普通表单验证不同的是,动态表单要新增自己的验证规则,和添加普通表单的方式一样

ruleForm:{
  //普通表单的验证规则
},
//新增表单的验证规则
   moreNotifyOjbectRules: {
    moreNotifyOjbectName: [{ required: true, message: '请输入联系人名称', trigger: 'blur' },
     {
      validator: (rule, value, callback) => {
       if (value.length > 15 || value.length < 2) {
        callback(new Error('长度必须为2~8个字符'))
       } else {
        var reg = new RegExp("[`~!@#$^&*()=|{}':',\\[\\].<>《》/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]")
        if (reg.test(value)) {
         callback(new Error('不能含有特殊字符'))
        } else {
         callback()
        }
       }
      },
      trigger: 'change'
     }
    ],
    moreNotifyOjbectEmail: [{ required: true, message: '请输入邮箱地址', trigger: 'blur' },
     { type: 'email', message: '请输入正确的邮箱地址', trigger: 'blur' }
    ]
   }

这里需要注意的是:rules是每个表单都要都要添加的,有多个的话就要给每个表单绑定一个规则

<el-form-item class="rules" label="通知对象:" :prop="'moreNotifyObject.' + index +'.notifyobject'" :rules="moreNotifyOjbectRules.moreNotifyOjbectName">
<el-form-item class="rules" label="邮箱:" :prop="'moreNotifyObject.'+ index +'.email'" :rules="moreNotifyOjbectRules.moreNotifyOjbectEmail">

另外要注意的是:prop,正常表单验证单项是依靠prop,但是动态生成话要用:prop。

书写的语法是:prop="'moreNotifyObject.' + index +'.notifyobject'",moreNotifyObject是v-for绑定的数组,index是索引,notifyobject是表单绑定的v-model的名称,然后用.把他们链接起来。

所以总结起来的语法就是:prop="'v-for绑定的数组.' + index + '.v-model绑定的变量'"

还有一个需要注意就是v-for的写法,要将表单的model名写进去

<div class="moreRulesIn" v-for="(item, index) in ruleForm.moreNotifyObject" :key="item.key">

还有要注意的就是v-for绑定的数组也要在表单的对象里,写在表单对象外是验证不了的,在data里添加

ruleform:{
  moreNotifyObject: [{
     notifyobject: '',
     email: ''
    }]
}

然后新增联系人的函数应该这样写

addUser() {
   this.ruleForm.moreNotifyObject.push({
    notifyobject: '',
    email: ''
   })
  }

同理删除联系人也是

deleteRules(item, index) {
   this.index = this.ruleForm.moreNotifyObject.indexOf(item)
   if (index !== -1) {
    this.ruleForm.moreNotifyObject.splice(index, 1)
   }
  }

如果一开始只想让默认必填的表单显示,而新增的不显示,如文章最开头的表现一样,则可以在methods中初始化v-for绑定的数组

methods:{
  //初始化数据
  initData(){
    this.ruleFrom.moreNotifyObject = []
  }}

总结

以上所述是小编给大家介绍的Vue+Element实现动态生成新表单并添加验证功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JQuery设置和去除disabled属性的5种方法总结
May 16 Javascript
JQuery的ready函数与JS的onload的区别详解
Nov 21 Javascript
JavaScript两种跨域技术全面介绍
Apr 16 Javascript
node.js中的http.request方法使用说明
Dec 14 Javascript
js实现简洁的TAB滑动门效果代码
Sep 06 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
Apr 24 jQuery
vue插件vue-resource的使用笔记(小结)
Aug 04 Javascript
Vue组件中的data必须是一个function的原因浅析
Sep 03 Javascript
最简单的JS实现json转csv的方法
Jan 10 Javascript
vue倒计时刷新页面不会从头开始的解决方法
Mar 03 Javascript
jQuery加PHP实现图片上传并提交的示例代码
Jul 16 jQuery
js仿京东放大镜效果
Aug 09 Javascript
vue elementui el-form rules动态验证的实例代码详解
May 23 #Javascript
vue.js表单验证插件(vee-validate)的使用教程详解
May 23 #Javascript
使用vue自定义指令开发表单验证插件validate.js
May 23 #Javascript
微信小程序开发实现消息推送
Nov 18 #Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
May 23 #jQuery
js打开word文档预览操作示例【不是下载】
May 23 #Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
May 23 #Javascript
You might like
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
我的php学习笔记(毕业设计)
2012/02/21 PHP
php设计模式之命令模式的应用详解
2013/05/21 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
php求数组全排列,元素所有组合的方法总结
2017/03/14 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
2019/04/10 PHP
javascript 动态添加表格行
2006/06/22 Javascript
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
JavaScript 自动完成脚本整理(33个)
2009/10/20 Javascript
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
通过下拉框的值来确定输入框是否可以为空的代码
2011/10/18 Javascript
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
js+div实现图片滚动效果代码
2014/02/10 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
给easyui的datebox控件添加清空按钮的实现方法
2016/11/09 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
微信小程序实现单列下拉菜单效果
2019/04/25 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
vue 实现走马灯效果
2019/10/28 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
python opencv摄像头的简单应用
2019/06/06 Python
Python Pillow.Image 图像保存和参数选择方式
2020/01/09 Python
解决 jupyter notebook 回车换两行问题
2020/04/15 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
python使用自定义钉钉机器人的示例代码
2020/06/24 Python
HTML最新标准HTML5总结(必看)
2016/06/13 HTML / CSS
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
介绍一下ICMP(Internet Control Message Protocol)Internet控制信息协议
2016/11/26 面试题
初中校园之声广播稿
2014/01/15 职场文书
指导教师评语
2014/04/26 职场文书
医学生求职信
2014/07/01 职场文书
出国留学导师推荐信
2015/03/26 职场文书
三好学生竞选稿范文
2019/08/21 职场文书