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 相关文章推荐
js日历功能对象
Jan 12 Javascript
js创建一个input数组并绑定click事件的方法
Jun 12 Javascript
Backbone.js中的集合详解
Jan 14 Javascript
javascript框架设计之类工厂
Jun 23 Javascript
JS Array创建及concat()split()slice()的使用方法
Jun 03 Javascript
分享javascript实现的冒泡排序代码并优化
Jun 05 Javascript
BootStrap中
Dec 10 Javascript
js+div+css下拉导航菜单完整代码分享
Dec 28 Javascript
Vuex入门到上手教程
Jun 20 Javascript
每周一练 之 数据结构与算法(Stack)
Apr 16 Javascript
react实现同页面三级跳转路由布局
Sep 26 Javascript
vue中注册自定义的全局js方法
Nov 15 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
在IIS上安装PHP4.0正式版
2006/10/09 PHP
PHP数组交集的优化代码分析
2011/03/06 PHP
php常用的安全过滤函数集锦
2014/10/09 PHP
Thinkphp多文件上传实现方法
2014/10/31 PHP
PHP微信开发之查询微信精选文章
2016/06/23 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
js二级地域选择的实现方法
2013/06/17 Javascript
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
js中Image对象以及对其预加载处理示例
2013/11/20 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
Javascript中arguments对象详解
2014/10/22 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
2015/06/03 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
vue-cli项目修改文件热重载失效的解决方法
2018/09/19 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
python操作sqlite的CRUD实例分析
2015/05/08 Python
python 实现自动远程登陆scp文件实例代码
2017/03/13 Python
python中正则表达式的使用方法
2018/02/25 Python
python字符串下标与切片及使用方法
2020/02/13 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
C/C++ 笔试、面试题目大汇总
2015/11/21 面试题
一套软件开发工程师笔试题
2015/05/18 面试题
公司总经理岗位职责
2014/03/15 职场文书
毕业生爱心捐书倡议书
2015/04/27 职场文书
2021-4-5课程——SQL Server查询【3】
2021/04/05 SQL Server
php+laravel 扫码二维码签到功能
2021/05/15 PHP
动画电影《擅长捉弄人的高木同学》6月10日上映!
2022/03/20 日漫