欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue+elementUI 復(fù)雜表單的驗證、數(shù)據(jù)提交方案問題

 更新時間:2019年06月24日 11:19:28   作者:漓漾li  
這篇文章主要介紹了vue+elementUI 復(fù)雜表單的驗證、數(shù)據(jù)提交方案,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下

當(dāng)我們在做后臺管理系統(tǒng)時,經(jīng)常會遇到非常復(fù)雜的表單:

  • 表單項非常多
  • 在各種表單類型下,顯示不同的表單項
  • 在某些條件下,某些表單項會關(guān)閉驗證
  • 每個表單項還會有其他自定義邏輯,比如 輸入框可以插入模板變量、輸入字符數(shù)量顯示、圖片上傳并顯示、富文本 。。。
  • 在這種錯綜復(fù)雜的情況下,完成表單的驗證和提交
  • 可以查看具體例子:例子中省略了很多瑣碎的功能,只保留整體的復(fù)雜表單框架,用于展示解決方案

方案1: 在一個 vue 文件中

所有的表單項顯示隱藏、驗證、數(shù)據(jù)獲取、提交、自定義等邏輯放在一起

v-if/v-show
elementui

缺點

  • 還是亂
  • 一個 vue 文件,輕輕松松上 2000 行
  • 在我嘗試加入一種新的表單類型時,我發(fā)現(xiàn)我已經(jīng)無。從。下。手。

方案2:分離組件

其實很容易想到 根據(jù)不同的表單類型,分離出多個相應(yīng)類型的子表單 。但我在實踐時還是遇到了很多問題: 父子表單驗證、整體提交數(shù)據(jù)的獲取 等等,并總結(jié)出一套解決方案:

1. 子組件

所有的子組件中都需要包含兩個方法 validate 、 getData 供父組件調(diào)用。

(1) validate 方法

用于驗證本身組件的表單項,并返回一個 promise 對象

vaildate() {
 // 返回`elementUI`表單驗證的結(jié)果(為`promise`對象)
 return this.$refs["ruleForm"].validate();
},
   

(2) getData 方法

提供子組件中的數(shù)據(jù)

getData() {
 // 返回子組件的form
 return this.ruleForm;
},

2. 父組件

(1)策略模式

使用策略模式存儲并獲取 子表單的 ref (用于獲取子表單的方法)和 提交函數(shù) 。省略了大量的 if-else 判斷。

data:{
 // type和ref名稱的映射
 typeRefMap: {
 1: "message",
 2: "mail",
 3: "apppush"
 },
 // type和提交函數(shù)的映射。不同類型,接口可能不同
 typeSubmitMap: {
 1: data => alert(`短信模板創(chuàng)建成功${JSON.stringify(data)}`),
 2: data => alert(`郵件模板創(chuàng)建成功${JSON.stringify(data)}`),
 3: data => alert(`push模板創(chuàng)建成功${JSON.stringify(data)}`)
 },
}

(2) submit 方法

用于父子組件表單驗證、獲取整體數(shù)據(jù)、調(diào)用當(dāng)前類型提交函數(shù)提交數(shù)據(jù)

因為 elementUI 表單驗證的 validate 方法可以返回 promise 結(jié)果 ,可以利用 promise 的特性來處理父子表單的驗證。 比如 then 函數(shù)可以返回另一個 promise 對象 、 catch 可以獲取它以上所有 then 的 reject 、 Promise.all 。

父表單驗證通過才會驗證子表單,存在先后順序

// 父表單驗證通過才會驗證子表單,存在先后順序
submitForm() {
 const templateType = this.typeRefMap[this.indexForm.type];
 this.$refs["indexForm"]
 .validate()
 .then(res => {
 // 父表單驗證成功后,驗證子表單
 return this.$refs[templateType].vaildate();
 })
 .then(res => {
 // 全部驗證通過
 // 獲取整體數(shù)據(jù)
 const reqData = {
 // 獲取子組件數(shù)據(jù)
 ...this.$refs[templateType].getData(),
 ...this.indexForm
 };
 // 獲取當(dāng)前表單類型的提交函數(shù),并提交
 this.typeSubmitMap[this.indexForm.type](reqData);
 })
 .catch(err => {
 console.log(err);
 });
},

父表單,子表單一起驗證

submitForm1() {
 const templateType = this.typeRefMap[this.indexForm.type];
 const validate1 = this.$refs["indexForm"].validate();
 const validate2 = this.$refs[templateType].vaildate();
 // 父子表單一起驗證
 Promise.all([validate1, validate2])
 .then(res => {
 // 都通過時,發(fā)送請求
 const reqData = {
 ...this.$refs[templateType].getData(),
 ...this.indexForm
 };
 this.typeSubmitMap[this.indexForm.type](reqData);
 })
 .catch(err => {
 console.log(err);
 });
},

查看在線項目,項目github組件代碼

總結(jié)

以上所述是小編給大家介紹的vue+elementUI 復(fù)雜表單的驗證、數(shù)據(jù)提交方案問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • vue?elementui二次封裝el-table帶插槽問題

    vue?elementui二次封裝el-table帶插槽問題

    這篇文章主要介紹了vue?elementui二次封裝el-table帶插槽問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue的自定義指令傳參方式

    vue的自定義指令傳參方式

    這篇文章主要介紹了vue的自定義指令傳參方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • vue3.0+echarts實現(xiàn)立體柱圖

    vue3.0+echarts實現(xiàn)立體柱圖

    這篇文章主要為大家詳細介紹了vue3.0+echarts實現(xiàn)立體柱圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • vue 1.x 交互實現(xiàn)仿百度下拉列表示例

    vue 1.x 交互實現(xiàn)仿百度下拉列表示例

    本篇文章主要介紹了vue 1.x 交互實現(xiàn)仿百度下拉列表示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 詳解在vue-cli項目下簡單使用mockjs模擬數(shù)據(jù)

    詳解在vue-cli項目下簡單使用mockjs模擬數(shù)據(jù)

    這篇文章主要介紹了詳解在vue-cli項目下簡單使用mockjs模擬數(shù)據(jù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • 解決Element ui導(dǎo)航欄選中背景色刷新消失的問題

    解決Element ui導(dǎo)航欄選中背景色刷新消失的問題

    這篇文章主要介紹了解決Element ui導(dǎo)航欄選中背景色刷新消失的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 使用vue如何構(gòu)建一個自動建站項目

    使用vue如何構(gòu)建一個自動建站項目

    這篇文章主要介紹了使用vue如何構(gòu)建一個自動建站項目,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • 利用Vue.js制作一個拼圖華容道小游戲

    利用Vue.js制作一個拼圖華容道小游戲

    這篇文章主要為大家詳細介紹了如何利用Vue.js編寫一個拼圖華容道游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Vue+ElementUI?實現(xiàn)分頁功能-mysql數(shù)據(jù)

    Vue+ElementUI?實現(xiàn)分頁功能-mysql數(shù)據(jù)

    這篇文章主要介紹了Vue+ElementUI?實現(xiàn)分頁查詢-mysql數(shù)據(jù),當(dāng)數(shù)據(jù)庫中數(shù)據(jù)比較多時,就每次只查詢一部分來緩解服務(wù)器和頁面壓力。這里使用elementui的?Pagination?分頁?組件,配合mysql的limit語句,實現(xiàn)分頁查詢mysql數(shù)據(jù),下面來看看具體實現(xiàn)過程,希望對大家學(xué)習(xí)有所幫助
    2021-12-12
  • 基于element-ui表格的二次封裝實現(xiàn)

    基于element-ui表格的二次封裝實現(xiàn)

    本文主要介紹了基于element-ui表格的二次封裝實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評論