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 相关文章推荐
ExtJS 2.0实用简明教程 之Ext类库简介
Apr 29 Javascript
js 面向对象的技术创建高级 Web 应用程序
Feb 25 Javascript
jQuery1.6 正式版发布并提供下载
May 05 Javascript
JS无限极树形菜单,json格式、数组格式通用示例
Jul 30 Javascript
js验证整数加保留小数点的简单实例
Dec 02 Javascript
javascript的switch用法注意事项分析
Feb 02 Javascript
JavaScript常用的弹出广告及背投广告实现方法
Feb 06 Javascript
Javascript中的包装类型介绍
Apr 02 Javascript
JavaScript通过Date-Mask将日期转换成字符串的方法
Jun 04 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
Mar 11 Javascript
JavaScript实现页面跳转的方式汇总
May 16 Javascript
微信小程序 购物车简单实例
Oct 24 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验证码类(分享)
2013/08/06 PHP
PHP面向对象教程之自定义类
2014/06/10 PHP
php对象在内存中的存在形式分析
2015/02/03 PHP
PHP对象、模式与实践之高级特性分析
2016/12/08 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
2019/10/11 PHP
js的表单操作 简单计算器
2011/12/29 Javascript
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
利用JS生成博文目录及CSS定制博客
2016/02/10 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
微信小程序 location API接口详解及实例代码
2016/10/12 Javascript
深入理解vue中的$set
2017/06/01 Javascript
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
Python实现向QQ群成员自动发邮件的方法
2014/11/19 Python
python多进程操作实例
2014/11/21 Python
解决Python print输出不换行没空格的问题
2018/11/14 Python
python3.4爬虫demo
2019/01/22 Python
python绘制规则网络图形实例
2019/12/09 Python
python中shell执行知识点
2020/05/06 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
学生会竞选自荐信
2013/10/12 职场文书
翻译专业应届生求职信
2013/11/23 职场文书
师范毕业生个人求职信
2013/12/09 职场文书
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
百日安全生产活动总结
2014/07/05 职场文书
求职意向书
2014/07/29 职场文书
最新离婚协议书范本
2014/08/19 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书
MySQL主从搭建(多主一从)的实现思路与步骤
2021/05/13 MySQL
详解Java实践之建造者模式
2021/06/18 Java/Android
Windows下载并安装MySQL8.0.x 版本的完整教程
2022/04/10 MySQL