最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

方案1: 在一個(gè) vue 文件中

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

v-if/v-show
elementui

缺點(diǎn)

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

方案2:分離組件

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

1. 子組件

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

(1) validate 方法

用于驗(yàn)證本身組件的表單項(xiàng),并返回一個(gè) promise 對象

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

(2) getData 方法

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

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

2. 父組件

(1)策略模式

使用策略模式存儲(chǔ)并獲取 子表單的 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 方法

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

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

父表單驗(yàn)證通過才會(huì)驗(yàn)證子表單,存在先后順序

// 父表單驗(yàn)證通過才會(huì)驗(yàn)證子表單,存在先后順序
submitForm() {
 const templateType = this.typeRefMap[this.indexForm.type];
 this.$refs["indexForm"]
 .validate()
 .then(res => {
 // 父表單驗(yàn)證成功后,驗(yàn)證子表單
 return this.$refs[templateType].vaildate();
 })
 .then(res => {
 // 全部驗(yàn)證通過
 // 獲取整體數(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);
 });
},

父表單,子表單一起驗(yàn)證

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

查看在線項(xiàng)目,項(xiàng)目github組件代碼

總結(jié)

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

相關(guān)文章

  • 淺談在vue項(xiàng)目中如何定義全局變量和全局函數(shù)

    淺談在vue項(xiàng)目中如何定義全局變量和全局函數(shù)

    本篇文章主要介紹了淺談在vue項(xiàng)目中如何定義全局變量和全局函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Vue中使用Element UI的Table組件實(shí)現(xiàn)嵌套表格功能

    Vue中使用Element UI的Table組件實(shí)現(xiàn)嵌套表格功能

    這篇文章主要介紹了Vue中使用Element UI的Table組件實(shí)現(xiàn)嵌套表格功能,演示如何在Vue中使用Element UI的Table組件實(shí)現(xiàn)嵌套表格,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • element plus tree拖動(dòng)節(jié)點(diǎn)交換位置和改變層級(jí)問題(解決方案)

    element plus tree拖動(dòng)節(jié)點(diǎn)交換位置和改變層級(jí)問題(解決方案)

    圖層list里有各種組件,用element plus的tree來渲染,可以把圖片等組件到面板里,面板是容器,非容器組件,比如圖片、文本等,就不能讓其他組件拖進(jìn)來,這篇文章主要介紹了element plus tree拖動(dòng)節(jié)點(diǎn)交換位置和改變層級(jí)問題(解決方案),需要的朋友可以參考下
    2024-04-04
  • vue el-table 動(dòng)態(tài)添加行與刪除行的實(shí)現(xiàn)

    vue el-table 動(dòng)態(tài)添加行與刪除行的實(shí)現(xiàn)

    這篇文章主要介紹了vue el-table 動(dòng)態(tài)添加行與刪除行的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Vue實(shí)現(xiàn)封裝一個(gè)切片上傳組件

    Vue實(shí)現(xiàn)封裝一個(gè)切片上傳組件

    平時(shí)業(yè)務(wù)開發(fā)中用el-upload能滿足大部分場景,但是對于一些大文件的上傳時(shí)會(huì)比較慢,所以自己基于el-upload封裝了一個(gè)切片上傳組件,希望對大家有所幫助
    2023-03-03
  • vue3中各種類型文件進(jìn)行預(yù)覽功能實(shí)例

    vue3中各種類型文件進(jìn)行預(yù)覽功能實(shí)例

    在vue移動(dòng)端項(xiàng)目中經(jīng)常遇到這樣的需求,對一些上傳的附件可以點(diǎn)擊之后在線預(yù)覽,所以下面這篇文章主要給大家介紹了關(guān)于vue3中各種類型文件進(jìn)行預(yù)覽功能的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • vue路由中前進(jìn)后退的一些事兒

    vue路由中前進(jìn)后退的一些事兒

    這篇文章主要給大家介紹了關(guān)于vue路由中前進(jìn)后退的一些事兒,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用vue路由具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 使用ElementUI中el-upload上傳文件轉(zhuǎn)base64格式

    使用ElementUI中el-upload上傳文件轉(zhuǎn)base64格式

    這篇文章主要介紹了使用ElementUI中el-upload上傳文件轉(zhuǎn)base64格式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • element ui el-date-picker組件默認(rèn)值方式

    element ui el-date-picker組件默認(rèn)值方式

    這篇文章主要介紹了element ui el-date-picker組件默認(rèn)值方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Unocss(原子化css)?使用及vue3?+?vite?+?ts講解

    Unocss(原子化css)?使用及vue3?+?vite?+?ts講解

    這篇文章主要介紹了Unocss(原子化css)使用vue3?+?vite?+?ts的方法,簡單介紹了Unocss使用及圖標(biāo)庫使用,通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11

最新評(píng)論

东台市| 嘉荫县| 商丘市| 万宁市| 法库县| 开平市| 峨边| 息烽县| 塔河县| 娱乐| 林西县| 峨眉山市| 布拖县| 施甸县| 黄山市| 安福县| 凌云县| 竹山县| 独山县| 吉木乃县| 霸州市| 固镇县| 陇西县| 墨竹工卡县| 株洲市| 辽中县| 手游| 荥经县| 政和县| 四子王旗| 宁武县| 盐津县| 池州市| 左云县| 绵竹市| 新安县| 镇安县| 都江堰市| 盱眙县| 江永县| 普格县|