使用 element-ui 同时添加表单中的多个子表单项的解决方案

最近在做一个和Vue相关的项目,在项目中使用到了element-ui 组件库。当时看这个组件库的表单验证和布局样式啥的都挺好看的,所以就选择了它来完成这个小项目。

但是在开发的过程中遇到了一个需求:在创建表单后,我需要动态的添加表单中的某几项(用户添加的项的数量是不固定的),还需要为每组动态添加的表单项上加上表单验证的规则。

于是尝试着去element-ui官网查找有没有已经造好的轮子,结果我发现了一个类似的功能,但是他是动态的添加表单中的某一项。具体的效果和代码如下:

使用 element-ui 同时添加表单中的多个子表单项的解决方案_第1张图片
QQ截图20190520190707.jpg

官网示例实现代码如下:


  
    
  
  
    删除
  
  
    提交
    新增域名
    重置
  


官网实现原理分析

在代码中关注其添加表单的代码实现,我们可以很快发现:在视图中使用 v-for 指令渲染表单中的 domains 数组,在添加数组项的时候,直接向表单中的 domains 数组里面新增一个对象,之后会触发 Vue 的视图更新,来实现动态增加表单项的效果。至于每个表单项的验证,官方的做法是将 rule 验证规则写在了 v-for 渲染的元组中。

仿照官方实现来完成需求

那么对于我的这个需求,也可以模仿element-ui组件库官方的添加单个表单项的思路来实现。具体实现的思路可以分为以下几步:
1, 在表单中设置一个数组变量,其中数组的元素为对象,每个对象的结构就是子表单组的结构。

  1. 在视图中使用 v-for 来实现每个表单项的渲染和添加验证规则
  2. 当添加表单项的时候,向表单中的数组中 push 一个和子表单组结构相同的对象,并将其初始化,使得Vue能够检测到数据的变化从而触发视图进行相应的更新。

以下实现代码仅供参考:

  • 视图部分

    
        
            
                
                
            
        
    
    
        
            
                
                
            
        
    
    
        
            
            
        
    
    
        
            
                
                
                
            
        
    

  • 数据逻辑部分:
Vue({
  el: '#app',
data: {
  return {
      searchForm: {
        itineraries: [{ start: '', end: '', departureDate: '', cabinClass: 'Y' }]
      }
    }
  },
methods: {
    addGroup() {
      this.searchForm.itineraries.push({ start: '', end: '', departureDate: '', cabinClass: 'Y' })
    }
  }
})

最终展现效果:


使用 element-ui 同时添加表单中的多个子表单项的解决方案_第2张图片
QQ截图20190520194124.jpg

你可能感兴趣的:(使用 element-ui 同时添加表单中的多个子表单项的解决方案)