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 相关文章推荐
贴一个在Mozilla中常用的Javascript代码
Jan 09 Javascript
获取当前网页document.url location.href区别总结
May 10 Javascript
javascript 兼容鼠标滚轮事件
Apr 07 Javascript
IE innerHTML,outerHTML所引起的问题
Jun 04 Javascript
jQuery处理json数据返回数组和输出的方法
Mar 11 Javascript
js带缩略图的图片轮播效果代码分享
Sep 14 Javascript
Google 地图类型详解及示例代码
Aug 06 Javascript
jQuery日程管理插件fullcalendar使用详解
Jan 07 Javascript
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
Nov 09 jQuery
微信小程序倒计时功能实现代码
Nov 09 Javascript
JavaScript栈和队列相关操作与实现方法详解
Dec 07 Javascript
详解webpack-dev-middleware 源码解读
Mar 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
深入密码加salt原理的分析
2013/06/06 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
php常量详细解析
2015/10/27 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
tagName的使用,留一笔
2006/06/26 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
JQuery循环滚动图片代码
2011/12/08 Javascript
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
jquery改变disabled的boolean状态的三种方法
2013/12/13 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
JavaScript实现的encode64加密算法实例分析
2015/04/15 Javascript
jQuery关键词说明插件cluetip使用指南
2015/04/21 Javascript
jQuery插件Validation快速完成表单验证的方式
2016/07/28 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
javascript实现文字无缝滚动
2016/12/27 Javascript
AngularJS动态菜单操作指令
2017/04/25 Javascript
NodeJS实现视频转码的示例代码
2017/11/18 NodeJs
JS关闭子窗口并且刷新上一个窗口的实现示例
2020/03/10 Javascript
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
使用Python实现windows下的抓包与解析
2018/01/15 Python
python矩阵的转置和逆转实例
2018/12/12 Python
python 两个数据库postgresql对比
2019/10/21 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
python thrift 实现 单端口多服务的过程
2020/06/08 Python
python中元组的用法整理
2020/06/15 Python
CSS3的RGBA中关于整数和百分比值的转换
2015/08/04 HTML / CSS
HTML5实现视频弹幕功能
2019/08/09 HTML / CSS
数据员岗位职责
2013/11/19 职场文书
《明天,我们毕业》教学反思
2014/04/24 职场文书
党的群众路线批评与自我批评发言稿
2014/10/16 职场文书
校长个人总结
2015/03/03 职场文书
画展观后感
2015/06/17 职场文书
先进基层党组织主要事迹材料
2015/11/03 职场文书
《圆的周长》教学反思
2016/02/17 职场文书