vue element动态渲染、移除表单并添加验证的实现


Posted in Javascript onJanuary 16, 2019

又接到新需求了吧~~

背景

在一个大表单里,有可能会出现这种需求,用户可以自己操作动态添加、移除表单,更加个性化的效果。

常见于填写个人信息、附加内容的表单

例如:

“工作经历”可以用户自己点击继续添加按钮,在原有的表单后面 append 多一个表单,不需要就点击右上方 X 按钮移除

问题

在实现之前,提出几个问题

  • vue 怎么动态渲染或移除表单上去
  • v-model 怎么绑定动态添加表单的 value 值
  • 动态新增的表单如何验证
  • 动态表单怎么填写对应的 prop
  • ...

好吧,我当时也思考了一会,最后选择数组方式,动态渲染

代码实现讲解

利用数组,v-for 循环方式,可以完美实现动态渲染和移除,因为操作的只有对象数组而已

export default {
 name: 'vouchersDetail',
 data() {
  return {
   form: {
    regionName: '',
    regionCode: '',
  // 动态添加的对象数组
    azList: [
     {
      azName: '',
      logicCode: '',
      physicCode: ''
     }
    ]
   }
  }
 },
 computed: {
  // 至少保留一个动态表单的开关
  isShowCloseBtn() {
   return this.form['azList'].length > 1
  }
 },
 methods: {
  addItem() {
   // 点击添加表单的按钮,只需要将表单绑定的 value 作为对象 push 到对象数组
   this.form['azList'].push({
    azName: '',
    logicCode: '',
    physicCode: '',
    weight: ''
   })
  },
  deleteItem(index) {
   // 点击移除表单的按钮,根据点击的当前 index 移除对象数组的元素
   this.form['azList'].splice(index, 1)
  },
  goBack() {
   window.history.back(-1)
  }
 }
}

请格外注意动态添加表单的 rule 和 prop

每个动态添加的表单都要加上 rule

prop 需要根据对象数组下标绑定设置对应的 value(:prop="'azList' + index + '.azName'")

那么对应的 html 形式为

<div class="section-form" v-for="(item, index) in form.azList" :key="index"> 
 <span v-if="isShowCloseBtn" class="close" @click="deleteItem(index)">
  <i class="el-icon-close"></i>
 </span> 
 <el-form-item label="可用区名称:"
  :rules="[{ required: true, message: '可用区名称不能为空' }]"
  :prop="'azList[' + index + '].azName'"
  label-width="150px"> 
  <el-input placeholder="请输入可用区名称" v-model="item.azName" :maxlength="30"></el-input> 
 </el-form-item> 
 <el-form-item label="逻辑可用区编码:"
  :rules="[{ required: true, message: '逻辑可用区编码不能为空' }]"
  label-width="150px"
  :prop="'azList[' + index + '].logicCode'"> 
  <el-input placeholder="请输入唯一ID" v-model="item.logicCode" :maxlength="30"></el-input> 
 </el-form-item> 
 <el-form-item label="物理可用区编码:"
  :rules="[{ required: true, message: '物理可用区编码不能为空' }]"
  label-width="150px"
  :prop="'azList[' + index + '].physicCode'"> 
  <el-input placeholder="请输入唯一ID" v-model="item.physicCode" :maxlength="30"></el-input> 
 </el-form-item>
</div>

写在后面

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript中令你抓狂的魔术变量
Nov 30 Javascript
jQuery 树形结构的选择器
Feb 15 Javascript
菜鸟javascript基础资料整理2
Dec 06 Javascript
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
Jul 31 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
Jul 18 Javascript
js实现DOM走马灯特效的方法
Jan 21 Javascript
JS实现六边形3D拖拽翻转效果的方法
Sep 11 Javascript
jQuery快速高效制作网页交互特效
Feb 24 Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
Jun 13 Javascript
js实现京东轮播图效果
Jun 30 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
Sep 22 Javascript
解决vue-router进行build无法正常显示路由页面的问题
Mar 06 Javascript
深入koa-bodyparser原理解析
Jan 16 #Javascript
jQuery实现的点击图片居中放大缩小功能示例
Jan 16 #jQuery
详解微信小程序之scroll-view的flex布局问题
Jan 16 #Javascript
vue开发环境配置跨域的方法步骤
Jan 16 #Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
Jan 16 #Javascript
在Create React App中启用Sass和Less的方法示例
Jan 16 #Javascript
在Create React App中使用CSS Modules的方法示例
Jan 15 #Javascript
You might like
无数据库的详细域名查询程序PHP版(2)
2006/10/09 PHP
PHP更新购物车数量(表单部分/PHP处理部分)
2013/05/03 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
php和redis实现秒杀活动的流程
2019/07/17 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
2019/10/18 PHP
利用js跨页面保存变量做菜单的方法
2008/01/17 Javascript
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
JSON字符串和对象之间的转换详解
2015/05/26 Javascript
javascript 四十条常用技巧大全
2016/09/09 Javascript
用jquery获取自定义的标签属性的值简单实例
2016/09/17 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
JavaScript动态绑定详解
2017/09/14 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
2018/03/01 Javascript
浅谈React的最大亮点之虚拟DOM
2018/05/29 Javascript
vue interceptor 使用教程实例详解
2018/09/13 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
VSCode搭建React Native环境
2020/05/07 Javascript
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
压缩包密码破解示例分享(类似典破解)
2014/01/17 Python
python实战之实现excel读取、统计、写入的示例讲解
2018/05/02 Python
python使用tkinter库实现五子棋游戏
2019/06/18 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
wxPython实现带颜色的进度条
2019/11/19 Python
canvas之自定义头像功能实现代码示例
2017/09/29 HTML / CSS
美国内衣品牌:Leonisa
2016/08/14 全球购物
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
法国在线药房:1001Pharmacies
2021/03/07 全球购物
仓管岗位职责范本
2014/02/08 职场文书
房屋继承公证书
2014/04/10 职场文书
事假请假条范文
2014/04/11 职场文书
企业精神口号
2014/06/11 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
一篇带你入门Java垃圾回收器
2021/06/16 Java/Android