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 相关文章推荐
js实现iframe动态调整高度的代码
Jan 06 Javascript
JavaScript中String和StringBuffer的速度之争
Apr 01 Javascript
javascript 折半查找字符在数组中的位置(有序列表)
Dec 09 Javascript
jQuery中delegate()方法用法实例
Jan 19 Javascript
js 递归和定时器的实例解析
Feb 03 Javascript
利用node.js实现自动生成前端项目组件的方法详解
Jul 12 Javascript
angular实现页面打印局部功能的思考与方法
Apr 13 Javascript
Node.js的进程管理的深入理解
Jan 09 Javascript
Vue实现商品分类菜单数量提示功能
Jul 26 Javascript
JS随机密码生成算法
Sep 23 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
Jun 01 Javascript
vue项目中使用多选框的实例代码
Jul 22 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 快速生成 Flash 动画的方法
2007/03/06 PHP
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
php实现从上传文件创建缩略图的方法
2015/04/02 PHP
详解Yii实现分页的两种方法
2017/01/14 PHP
php实现留言板功能(会话控制)
2017/05/23 PHP
使用Zttp简化Guzzle 调用
2017/07/02 PHP
js 实现在离开页面时提醒未保存的信息(减少用户重复操作)
2013/01/16 Javascript
javascript自动改变文字大小和颜色的效果的小例子
2013/08/02 Javascript
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
jquery easyui combobox模糊过滤(示例代码)
2013/11/30 Javascript
在Google 地图上实现做的标记相连接
2015/01/05 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
JavaScript中的return语句简单介绍
2015/12/07 Javascript
深入剖析javascript中的exec与match方法
2016/05/18 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
checkbox在vue中的用法小结
2018/11/13 Javascript
JavaScript中引用vs复制示例详析
2018/12/06 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
vue 实现通过vuex 存储值 在不同界面使用
2019/11/11 Javascript
Vue性能优化的方法
2020/07/30 Javascript
JavaScript/TypeScript 实现并发请求控制的示例代码
2021/01/18 Javascript
使用JS实现鼠标放上图片进行放大离开实现缩小功能
2021/01/27 Javascript
Python+tkinter模拟“记住我”自动登录实例代码
2018/01/16 Python
快速了解python leveldb
2018/01/18 Python
Flask入门之上传文件到服务器的方法示例
2018/07/18 Python
解决Python import docx出错DLL load failed的问题
2020/02/13 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
入党积极分子学习两会心得体会范文
2014/03/17 职场文书
《忆江南》教学反思
2014/04/07 职场文书
我的小天地教学反思
2014/04/30 职场文书
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
2014年人事科工作总结
2014/11/19 职场文书
企业财务管理制度范本
2015/08/04 职场文书
使用JS实现简易计算器
2021/06/14 Javascript