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 Undefined,Null类型和NaN值区别
Oct 22 Javascript
浅谈JavaScript中Date(日期对象),Math对象
Feb 05 Javascript
基于Javascript实现弹出页面效果
Jan 01 Javascript
Vue.js实现表格动态增加删除的方法(附源码下载)
Jan 20 Javascript
javascript获取图片的top N主色值方法详解
Jan 26 Javascript
JS中常用的消息框总结
Feb 24 Javascript
jquery向后台提交数组的代码分析
Feb 20 jQuery
vue-autoui自匹配webapi的UI控件的实现
Mar 20 Javascript
vue中的过滤器及其时间格式化问题
Apr 09 Javascript
Vue实现穿梭框效果
Sep 30 Javascript
vue使用video插件vue-video-player的示例
Oct 03 Javascript
TS 类型兼容教程示例详解
Sep 23 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&amp;MYSQL留言板源码
2020/07/19 PHP
php 显示指定路径下的图片
2009/10/29 PHP
php pack与unpack 摸板字符字符含义
2009/10/29 PHP
PHP 基本语法格式
2009/12/15 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
2014/05/10 PHP
php生成验证码函数
2015/10/20 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
解析使用js判断只能输入数字、字母等验证的方法(总结)
2013/05/14 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
鼠标滚轴控制文本框值的JS代码
2013/11/19 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
2014/05/28 Javascript
jquery插件推荐浏览器嗅探userAgent
2014/11/09 Javascript
JavaScript设计模式之建造者模式介绍
2014/12/28 Javascript
JS简单实现城市二级联动选择插件的方法
2015/08/19 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
2016/07/22 Javascript
javascript 数组去重复(在线去重工具)
2016/12/17 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
vue学习笔记之给组件绑定原生事件操作示例
2020/02/27 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
Python判断Abundant Number的方法
2015/06/15 Python
Ruby元编程基础学习笔记整理
2016/07/02 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
Python通过for循环理解迭代器和生成器实例详解
2019/02/16 Python
已安装tensorflow-gpu,但keras无法使用GPU加速的解决
2020/02/07 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
大专自我鉴定范文
2013/10/01 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书
运动会加油稿30字
2015/07/21 职场文书
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android
sql server 累计求和实现代码
2022/02/28 SQL Server