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 相关文章推荐
jQuery源码分析-01总体架构分析
Nov 14 Javascript
jQuery获取当前对象标签名称的方法
Feb 07 Javascript
jQuery遍历Table应用示例
Apr 09 Javascript
ext前台接收action传过来的json数据示例
Jun 17 Javascript
JavaScript使用indexOf获得子字符串在字符串中位置的方法
Apr 06 Javascript
Bootstrap 粘页脚效果
Mar 28 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
Nov 16 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
Jan 04 Javascript
详解Vue2.0里过滤器容易踩到的坑
Jun 01 Javascript
javascript数组定义的几种方法
Oct 06 Javascript
JavaScript实现一个简易的计算器实例代码
May 10 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
Mar 29 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 - Html Transfer Code
2006/10/09 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
PHP正则表达式过滤html标签属性(DEMO)
2016/05/04 PHP
php字符串截取函数mb_substr用法实例分析
2019/06/25 PHP
php7 参数、整形及字符串处理机制修改实例分析
2020/05/25 PHP
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
js中function()使用方法
2013/12/24 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
jQuery点击其他地方时菜单消失的实现方法
2016/04/22 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
jquery 多个radio的click事件实例
2016/12/03 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
javascript 作用于作用域链的详解
2017/09/27 Javascript
Vue动态控制input的disabled属性的方法
2018/06/26 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
python实现的简单抽奖系统实例
2015/05/22 Python
利用Python自动监控网站并发送邮件告警的方法
2016/08/24 Python
python opencv实现运动检测
2018/07/10 Python
Python中使用__new__实现单例模式并解析
2019/06/25 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
2019/07/23 Python
django数据关系一对多、多对多模型、自关联的建立
2019/07/24 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
Python小整数对象池和字符串intern实例解析
2020/03/21 Python
浅谈Python中threading join和setDaemon用法及区别说明
2020/05/02 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
HTML5标签与HTML4标签的区别示例介绍
2013/07/18 HTML / CSS
英国知名奢侈品包包品牌:Milli Millu
2016/12/22 全球购物
linux下进程间通信的方式
2013/01/23 面试题
八年级美术教学反思
2014/02/02 职场文书
计算机应用应届生求职信
2014/07/12 职场文书
三分钟自我介绍演讲稿
2014/08/21 职场文书
反腐倡廉警示教育活动心得体会
2014/09/04 职场文书
Pytest中skip和skipif的具体使用方法
2021/06/30 Python