本篇文章給大家分享的是有關(guān)使用vue怎么構(gòu)建一個(gè)動(dòng)態(tài)表單,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
創(chuàng)新互聯(lián)建站是一家專(zhuān)業(yè)提供桐柏企業(yè)網(wǎng)站建設(shè),專(zhuān)注與網(wǎng)站制作、網(wǎng)站建設(shè)、html5、小程序制作等業(yè)務(wù)。10年已為桐柏眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。概述
后臺(tái)管理系統(tǒng)里面有非常多的表單需求,我們希望能夠通過(guò)寫(xiě)一個(gè)json格式的數(shù)據(jù),通過(guò)vue的循環(huán)動(dòng)態(tài)地去渲染動(dòng)態(tài)表單。并且能夠在外部得到渲染出來(lái)的表單的數(shù)據(jù),可以對(duì)表單進(jìn)行重置操作。我結(jié)合element ui的控件的下拉框,輸入框,時(shí)間選擇控件和vue-treeselect,做了一個(gè)動(dòng)態(tài)表單。
v-model的理解
先簡(jiǎn)單講一下vue-model是怎么玩的。其實(shí)vue-model相當(dāng)于給表單元素傳遞一個(gè)value,外部監(jiān)聽(tīng)input事件。所以我們自己封裝表單組件的時(shí)候也是可以傳遞一個(gè)value值,監(jiān)聽(tīng)input事件獲取輸入的值。
封裝表單組件
組件最重要的開(kāi)發(fā)思想就是設(shè)計(jì)好輸入輸出。這里就以下拉框組件為例吧。使用的是element ui的下拉框,進(jìn)行一個(gè)簡(jiǎn)單封裝。
輸入:name:每個(gè)表單的數(shù)據(jù)標(biāo)識(shí),如區(qū)域編碼輸入框,父元素應(yīng)該傳遞areaCode過(guò)來(lái)。
value: 表單選擇/輸入的值,從父元素獲取后賦值給currentValue,通過(guò)監(jiān)聽(tīng)父元素的值實(shí)現(xiàn)同步變
化。
options:下拉框要渲染的選項(xiàng)值,一般是個(gè)對(duì)象數(shù)組。
輸出:onInputEvent,emit一個(gè)input事件,讓父元素能夠感知組件的數(shù)據(jù)變化。
也就是可以在組件使用的地方監(jiān)聽(tīng)input事件
一點(diǎn)封裝
由于每個(gè)表單組件都是監(jiān)聽(tīng)父元素的value值變化,數(shù)據(jù)變化時(shí)都是觸發(fā)onInputEvent并執(zhí)行this.$emit('input'),所以我們可以把這部分內(nèi)容抽取出來(lái)放在mixins里面。
form-model.js
export default { props: ['name', 'value'], data () { return { currentValue: this.value }; }, methods: { onInputEvent(value) { this.$emit('input', this.name, value); }, reset() { this.currentValue = ""; } }, watch: { value (val) { this.currentValue = val; } } };
然后我們的下拉框組件就可以少寫(xiě)一些共用的代碼,直接用 mixins: [formMixins]
動(dòng)態(tài)生成表單
這里主要是根據(jù)配置的數(shù)據(jù),循環(huán)生成表單組件。默認(rèn)提供提交和重置按鈕,如果不需要可以通過(guò)slot傳遞其他操作按鈕。這里的要點(diǎn)主要有:
監(jiān)聽(tīng)表單組件的數(shù)據(jù)變化:
每個(gè)表單組件都有一個(gè)name標(biāo)識(shí)它的業(yè)務(wù)含義,綁定的數(shù)據(jù)也是formData[field.name],@input事件傳遞updateForm,在updateForm里面更新this.formData[name],保證了this.formData里面的數(shù)據(jù)是和表單組件選擇/填寫(xiě)的內(nèi)容一致。
重置時(shí)改變表單組件的數(shù)據(jù):
因?yàn)榻M件內(nèi)部會(huì)監(jiān)聽(tīng)父元素的value,所以這里只要清空this.formData的值,組件內(nèi)部的數(shù)據(jù)也會(huì)跟著清空。
{{onSubmitText}} {{onResetText}}
業(yè)務(wù)使用的地方
像下拉框的選擇數(shù)據(jù),這些應(yīng)該是后臺(tái)渲染的,所以我們暫時(shí)用setTimeout模擬一下。感覺(jué)這里this.config.fieldsConfig[4].options寫(xiě)的不太優(yōu)雅,依賴(lài)于配置數(shù)據(jù)的順序肯定不是啥好事情。求大神指點(diǎn)。
以上就是使用vue怎么構(gòu)建一個(gè)動(dòng)態(tài)表單,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。