詳解Vue里循環(huán)form表單項實例
有的時候我們可能會遇到這種需求,用戶點擊某個按鈕就可以增加一個同樣的表單出來,點擊一次增加一次。然后要用到深拷貝,Vue.js+ElementUI等等。效果大概如下,就是一個表單有下拉框和兩個輸入框,現(xiàn)在點擊"添加表單"按鈕之后就會多一個表單出來,點擊"提交表單"后就同時提交兩個表單的value值。
代碼如下:
<template> <div> <div style="margin: 10px 0"> <el-button type="primary" @click="addForm">添加表單</el-button> <el-button type="primary" @click="submit">提交表單</el-button> </div> <div v-for="(item, index) in List" :key="index"> <el-form ref="form" label-width="80px"> <el-form-item label="直播平臺"> <el-select v-model="item.platform" :key="index" placeholder="請選擇直播平臺" > <el-option :label="item2.platformName" v-for="(item2, index2) in platformNameList" :key="index2" :value="item2.platformValue" > </el-option> </el-select> </el-form-item> <el-form-item label="粉絲量"> <el-input v-model="item.fanMount" :key="index"></el-input> </el-form-item> <el-form-item label="平臺ID"> <el-input v-model="item.platformId" :key="index"></el-input> </el-form-item> </el-form> </div> </div> </template> <script> export default { data() { return { title: "巡查內(nèi)容頁", personObj: { platform: "", fanMount: "", platformId: "", }, platformNameList: [ { platformName: "快手", platformValue: "1", }, { platformName: "抖音", platformValue: "2", }, { platformName: "淘寶", platformValue: "3", }, ], List: [ { platform: "", fanMount: "", platformId: "", }, ], }; }, methods: { //深拷貝 cloneObj(obj) { let ret; if (Array.isArray(obj)) { //創(chuàng)建一個空數(shù)組 ret = []; for (let i = 0; i < obj.length; i++) { ret[i] = this.cloneObj(obj[i]); } return ret; } else if (Object.prototype.toString.call(obj) === "[object Object]") { ret = {}; for (let i in obj) { ret[i] = this.cloneObj(obj[i]); } return ret; } else { return obj; } }, //添加表單 addForm() { let arr = this.cloneObj(this.personObj); console.log("arr", arr); this.List.push(arr); }, //提交表單 submit() { console.log("this.List", this.List); }, }, }; </script>
代碼分析:
這里封裝了一個深拷貝函數(shù),每次點擊添加表單時就會拷貝一份我們定義好的對象,注意這個對象是由我們初始表單的value值組合起來的,我們在最外層用v-for遍歷數(shù)組List然后每次點擊"添加表單"就往數(shù)組里push一個對象,最后點擊"提交表單"按鈕,打印this.List就能看到整個的數(shù)組對象了,我們來試一下,選擇輸入以下值:
控制臺打印看下效果:
現(xiàn)在假如說有個需求是,指定添加幾項表單,而不是點一次加一次表單,效果如下,有三個按鈕,最開始顯示一個表單
當我點擊"3個"按鈕的時候,界面總共有三個表單,如下圖:
代碼如下:
<template> <div> <div style="margin: 10px 0"> <el-button type="primary" @click="add(3)">3個</el-button> <el-button type="primary" @click="addForm">添加表單</el-button> <el-button type="primary" @click="submit">提交表單</el-button> </div> <div v-for="(item, index) in List" :key="index"> <el-form ref="form" label-width="80px"> <el-form-item label="直播平臺"> <el-select v-model="item.platform" :key="index" placeholder="請選擇直播平臺" > <el-option :label="item2.platformName" v-for="(item2, index2) in platformNameList" :key="index2" :value="item2.platformValue" > </el-option> </el-select> </el-form-item> <el-form-item label="粉絲量"> <el-input v-model="item.fanMount" :key="index"></el-input> </el-form-item> <el-form-item label="平臺ID"> <el-input v-model="item.platformId" :key="index"></el-input> </el-form-item> </el-form> </div> </div> </template> <script> export default { data() { return { title: "巡查內(nèi)容頁", personObj: { platform: "", fanMount: "", platformId: "", }, platformNameList: [ { platformName: "快手", platformValue: "1", }, { platformName: "抖音", platformValue: "2", }, { platformName: "淘寶", platformValue: "3", }, ], List: [ { platform: "", fanMount: "", platformId: "", }, ], }; }, methods: { cloneObj(obj) { let ret; if (Array.isArray(obj)) { //創(chuàng)建一個空數(shù)組 ret = []; for (let i = 0; i < obj.length; i++) { ret[i] = this.cloneObj(obj[i]); } return ret; } else if (Object.prototype.toString.call(obj) === "[object Object]") { ret = {}; for (let i in obj) { ret[i] = this.cloneObj(obj[i]); } return ret; } else { return obj; } }, add(a) { this.addForm(a); }, addForm(a) { let arr = this.cloneObj(this.personObj); console.log("arr", arr); this.List.push(arr); a--; if (a > 0) { this.addForm(a - 1); } }, submit() { console.log("this.list", this.List); }, }, }; </script> <style> </style>
代碼分析如下:
點擊按鈕的add方法的時候傳入總共的表單個數(shù),然后在添加表單的方法addForm里用了自減和判斷、遞歸來實現(xiàn)連續(xù)點擊時的拷貝等。然后我們試一下效果
控制臺打印看一下
到此這篇關于詳解Vue里循環(huán)form表單項實例的文章就介紹到這了,更多相關Vue循環(huán)form表單項內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
vue axios sessionID每次請求都不同的原因以及修改方式
這篇文章主要介紹了vue axios sessionID每次請求都不同的原因以及修改方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12VueJs中如何使用Teleport及組件嵌套層次結(jié)構(gòu)詳解
這篇文章主要為大家介紹了VueJs中如何使用Teleport及組件嵌套層次結(jié)構(gòu)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04vue3.2自定義彈窗組件結(jié)合函數(shù)式調(diào)用示例詳解
這篇文章主要為大家介紹了vue3.2自定義彈窗組件結(jié)合函數(shù)式調(diào)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09基于Vue2.0+ElementUI實現(xiàn)表格翻頁功能
Element UI 是一套采用 Vue 2.0 作為基礎框架實現(xiàn)的組件庫,它面向企業(yè)級的后臺應用,能夠幫助你快速地搭建網(wǎng)站,極大地減少研發(fā)的人力與時間成本。這篇文章主要介紹了Vue2.0+ElementUI實現(xiàn)表格翻頁功能,需要的朋友可以參考下2017-10-10