vue动态生成表单元素基础篇

vue动态生成表单元素基础篇这里讲解一个vue生成表单的简单实例:(图一)(图二)(图三)如上图所示:图一:空的输入框的情况图二:点击“+”添加生成表单的情况图三:表单中可以输入值,并且可以点击“—”删除和点击“+”添加View层<el-row:gutter="20"><el-col:sp…

大家好,欢迎来到IT知识分享网。

在这里插入图片描述

这里讲解一个vue生成表单的简单实例:

在这里插入图片描述
(图一)

在这里插入图片描述
(图二)

在这里插入图片描述
(图三)


如上图所示:

  • 图一: 空的输入框的情况
  • 图二: 点击 “+” 添加生成表单的情况
  • 图三: 表单中可以输入值,并且可以点击“—”删除和点击“+”添加

View层

          <el-row
            :gutter="20" >
            <el-col :span="3">
              <div class="item-title"><span class="text-red">*</span> 分享链接:</div>
            </el-col>
            <el-col :span="5">
              <div class="item-msg">
                <el-input
                  v-model.trim="data.link"
                  placeholder="输入内容"
                  size="mini"
                  clearable/>
              </div>
            </el-col>
          </el-row>
          
          <!-- 添加按钮 -->
          
          <el-row
            :gutter="20" >
            <el-col :span="3">
              <div
                class="item-title"
                @click = "addShareLink"><i class="el-icon-circle-plus"/></div>
            </el-col>
          </el-row>
          
          <!-- 动态添加参数 -->
        
            <el-row
              v-for="(todo,index) in shareParams"
              :key="index">
              <el-row :gutter="20">
                <el-col :span="3">
                  <div
                    class="item-title"
                    @click = "removeParam(index)"><i class="el-icon-remove"/>
                  </div>
                </el-col>
                <el-col
                  :span="1"
                  style="margin-top:10px;margin-right:20px;">
                  参数:
                </el-col>
                <el-col
                  :span="3"
                  style="margin-left: -38px;">
                  <el-input
                    v-model.trim="todoObj[todo.value]"
                    placeholder="输入内容"
                    size="mini"
                    clearable/>
                </el-col>
                <el-col :span="3">
                  <el-select
                    v-model="todoObj[todo.type]"
                    placeholder="请选择类型">
                    <el-option
                      v-for="(item, index) in choose"
                      :key="index"
                      :label="item.label"
                      :value="item.value"/>
                  </el-select>
                </el-col>
              </el-row>
            </el-row>

JS层

export default { 
   
	methods: { 
   
          // 添加分享链接参数
	    addShareLink() { 
   
	      this.index += 1;
	      this.shareParams.push({ 
   
	        id: this.index,
	        value: `link${ 
     this.index}`,
	        type: `type${ 
     this.index}`
	      });
	    },
	      // 删除分享参数
	    removeParam(index) { 
   
             this.shareParams.splice(index, 1);
          },
	}data() { 
   
	    return { 
   
	       index:0,
	       shareParams: [],
	       todoObj: { 
   },
	       data: { 
   
	        link: ""
	      }
	   }
	 }
 }

上面是对数据生成的处理,但是如果按照我中思路处理,最后提交是一个问题,所以在这里我要在写一个提交时数据格式化的函数:

    //提交的时候调用formatURL传入上面定义的 todoObj进行格式化
    
    formatURL(obj) { 
   
      let url = "";
      const tempArr = [];
      const arr = Object.keys(obj);
      let leng = 0;
      arr.map(item => { 
   
        if (item.slice(-1) * 1 > leng) { 
   
          leng = item.slice(-1) * 1;
        }
      });
      for (let i = 1; i <= leng; i += 1) { 
   
        const obj1key = arr.filter(item => item.slice(-1) * 1 === i);
        const obj1 = { 
   };
        obj1key.map(item => { 
   
          obj1[item] = obj[item];
        });
        tempArr.push(obj1);
      }
      tempArr.forEach(v => { 
   
        Object.keys(v).map(key => { 
   
          url += `${ 
     key}=${ 
     v[key]}&`;
        });
      });
      url = url.substring(0, url.length - 1);
      return `${ 
     this.data.link}?${ 
     url}`;
    },

最后转换的格式为:

    234567878888?type1=热热&link1=必填&type2=热热&link2=非必填&type3=热女&link2=非必填

上面是一个动态生层表单元素的基本形式,该代码可以直接移至到自己的项目中。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15059.html

(0)
上一篇 2024-02-20 07:33
下一篇 2024-02-21 20:45

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信