精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何手寫El-Form表單組件

開發 前端
最近又個項目讓我有開始接觸element-ui,想到當初對el-form表單有一些困惑,查看一下源碼和一些技術文章,對el-form有一些新的認識。

[[415219]]

本文轉載自微信公眾號「前端有道」,作者星野。轉載本文請聯系前端有道公眾號。

前言

在剛入行時候,只會知道如何使用表單組件,在后面一兩年工作中也沒有什么技術積累成為一個工具人,操作最多的就是ctrl+c和ctrl+v,在去年進了一家新公司,這家公司以前舊項目代碼經過太多人的手,代碼已經快不成人樣了,難以維護,技術人員已經跑的差不多了,我進去好在讓我們負責新的項目開發,要不然可能第二天就看不到我了,哈哈。項目主要面向于小程序和H5端,網上的UI庫很難滿足產品后續規劃需求開發,只好開始研究組件原理及封裝組件。

最近又個項目讓我有開始接觸element-ui,想到當初對el-form表單有一些困惑,查看一下源碼和一些技術文章,對el-form有一些新的認識。

Form 表單

下面是一份el-form示例代碼

  1. <template> 
  2.   <el-form :model="ruleForm" :rules="rules" ref="ruleForm"
  3.     <el-form-item label="名字" prop="pass"
  4.       <el-input type="password" v-model="ruleForm.pass"></el-input> 
  5.     </el-form-item> 
  6.     <el-form-item label="年齡" prop="age"
  7.       <el-input v-model.number="ruleForm.age"></el-input> 
  8.     </el-form-item> 
  9.     <el-form-item> 
  10.       <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button> 
  11.       <el-button @click="resetForm('ruleForm')">重置</el-button> 
  12.     </el-form-item> 
  13.   </el-form> 
  14. </template> 
  15.  
  16. <script> 
  17. export default { 
  18.   data() { 
  19.     return { 
  20.       ruleForm: { 
  21.         pass: ''
  22.         checkPass: ''
  23.         age: ''
  24.       }, 
  25.       rules: { 
  26.         pass: [{ required: true, message: '請輸入名字'trigger'blur' }], 
  27.         age: [{ required: true, message: '請輸入年齡'trigger'blur' }], 
  28.       }, 
  29.     } 
  30.   }, 
  31.   methods: { 
  32.     submitForm(formName) { 
  33.       this.$refs[formName].validate(valid => { 
  34.         if (valid) { 
  35.           alert('submit!'
  36.         } else { 
  37.           console.log('error submit!!'
  38.           return false 
  39.         } 
  40.       }) 
  41.     }, 
  42.     resetForm(formName) { 
  43.       this.$refs[formName].resetFields() 
  44.     }, 
  45.   }, 
  46. </script> 

首先要清楚一下組件的使用方式

1.el-form接收model和rule兩個prop

  • model表示表單綁定的數據對象
  • rule表示驗證規則策略,表單驗證

2.el-form-item接收的prop屬性,對應form組件的model數據中某個key值,如果rule剛好有key,給定的條件下去如失去焦點驗證規則匹不匹配。

最終得到類似這樣代碼結構

  1. <template> 
  2.   <div> 
  3.     <form @submit.prevent> 
  4.       <div> 
  5.         姓名<input v-model="form.name" /> 
  6.       </div> 
  7.       <div> 
  8.         年齡<input v-model="form.age" /> 
  9.       </div> 
  10.       <div> 
  11.         <button @click="submit">提交</button> 
  12.       </div> 
  13.     </form> 
  14.   </div> 
  15. </template> 

手寫表單組件

組件中嵌套組件,主要是通過slot插槽,可以將組件拼接成上面代碼結構。代碼如下

el-form

  1. <template> 
  2.     <form> 
  3.         <slot></slot> 
  4.     </form> 
  5. </template> 
  6. <script> 
  7. export default { 
  8.     name:'elForm' 
  9. </script> 

 

el-form-item

  1. <template> 
  2.     <div> 
  3.         <slot></slot> 
  4.     </div> 
  5. </template> 
  6. <script> 
  7. export default { 
  8.     name:'elFormItem' 
  9. </script> 

el-input

  1. <template> 
  2.     <input type="text"
  3. </template> 
  4. <script> 
  5. export default { 
  6.     name:'elInput' 
  7. </script> 

 接下來就要考慮到組件中的通訊。由于組件中有可能嵌套很多的組件,如果單純通過$parent和$children查找出來的父級組件,不一定是el-form組件。

兩個問題:

  • el-form-item組件如何得到el-form的數據
  • el-form組件如何和el-form-item進行交互

解決第一問題,可以通過provide與inject實現。解決第二問題,就要講到dispatch派發和broadcast廣播

provide與inject

通過provide將當前表單實例傳遞到所有后代組件中,后代通過inject接受傳遞的值。

el-form

  1. <template> 
  2.     <form><slot></slot></form> 
  3. </template> 
  4. <script> 
  5. export default { 
  6.     name:'elForm'
  7.     provide(){ 
  8.         return { 
  9.             elForm: this 
  10.         }   
  11.     }, 
  12.     props:{ 
  13.         model:{ 
  14.             type:Object, 
  15.             default:()=>({}) 
  16.         }, 
  17.         rules:Object 
  18.     } 
  19. </script> 

el-form-item

  1. <template> 
  2.     <div><slot></slot></div> 
  3. </template> 
  4. <script> 
  5. export default { 
  6.     name:'elFormItem'
  7.     inject:['elForm'], 
  8.     props:{ 
  9.         label:{  
  10.             type:String, 
  11.             default:'' 
  12.         }, 
  13.         prop:String  
  14.     }, 
  15.     mounted(){ 
  16.        console.log(this.elForm) 
  17.     } 
  18. </script> 

provide中this指el-form組件,this.elForm就能得到el-form組件中的數據和方法。

dispatch和broadcast廣播

$dispatch與$broadcast是一種有歷史的組件通信方式,因為他們是Vue1.0提供的一種方式,在Vue2.0中廢棄了。

$dispatch: $dispatch會向上觸發一個事件,同時傳遞要觸發的祖先組件的名稱與參數,當事件向上傳遞到對應的組件上時會觸發組件上的事件偵聽器,同時傳播會停止。

$broadcast: $broadcast會向所有的后代組件傳播一個事件,同時傳遞要觸發的后代組件的名稱與參數,當事件傳遞到對應的后代組件時,會觸發組件上的事件偵聽器,同時傳播會停止(因為向下傳遞是樹形的,所以只會停止其中一個葉子分支的傳遞)

$dispatch

  1. /** 
  2.  * 派發 (向上查找) (一個) 
  3.  * @param componentName // 需要找的組件的名稱 
  4.  * @param eventName // 事件名稱 
  5.  * @param params // 需要傳遞的參數 
  6.  */ 
  7.     dispatch(componentName, eventName, params) { 
  8.         let parent = this.$parent || this.$root;//$parent 找到最近的父節點 $root 根節點 
  9.         let name = parent.$options.name; // 獲取當前組件實例的name 
  10.         // 如果當前有節點 && 當前沒名稱 且 當前名稱等于需要傳進來的名稱的時候就去查找當前的節點 
  11.         // 循環出當前名稱的一樣的組件實例 
  12.         while (parent && (!name||name!==componentName)) { 
  13.             parent = parent.$parent; 
  14.             if (parent) { 
  15.                 name = parent.$options.name
  16.             } 
  17.         } 
  18.         // 有節點表示當前找到了name一樣的實例 
  19.         if (parent) { 
  20.             parent.$emit.apply(parent,[eventName].concat(params)) 
  21.         } 
  22.     }, 

$broadcast

  1. /** 
  2.  * 派發 (向上查找) (一個) 
  3.  * @param componentName // 需要找的組件的名稱 
  4.  * @param eventName // 事件名稱 
  5.  * @param params // 需要傳遞的參數 
  6.  */ 
  7. broadcast(componentName, eventName, params) { 
  8. // 循環子節點找到名稱一樣的子節點 否則 遞歸 當前子節點 
  9. this.$children.map(child=>{ 
  10.     if (componentName===child.$options.name) { 
  11.         child.$emit.apply(child,[eventName].concat(params)) 
  12.     }else { 
  13.         broadcast.apply(child,[componentName,eventName].concat(params)) 
  14.     } 
  15. }) 

驗證表單

async-validator是一個表單的異步驗證的第三方庫,也是element-ui 中的form組件所使用的驗證方式。 

el-form-item

  1. <template> 
  2.   <div> 
  3.     <label v-if="label">{{label}}</label> 
  4.     <slot></slot> 
  5.     {{errorMessage}} 
  6.   </div> 
  7. </template> 
  8. <script> 
  9. import Schema from "async-validator"
  10. export default { 
  11.   name"elFormItem"
  12.   inject: ["elForm"], 
  13.   props: { 
  14.     label: { 
  15.       type: String, 
  16.       default"" 
  17.     }, 
  18.     prop: String 
  19.   }, 
  20.   data(){ 
  21.       return {errorMessage:''
  22.   }, 
  23.   mounted() { 
  24.     this.$on("validate", () => { 
  25.       if (this.prop) { 
  26.         let rule = this.elForm.rules[this.prop]; 
  27.         let newValue = this.elForm.model[this.prop]; 
  28.  
  29.         let descriptor = { 
  30.           [this.prop]: rule 
  31.         }; 
  32.         let schema = new Schema(descriptor); 
  33.          
  34.         return schema.validate({[this.prop]:newValue},(err,res)=>{ 
  35.             if(err){ 
  36.                 this.errorMessage = err[0].message; 
  37.             }else
  38.                 this.errorMessage = '' 
  39.             } 
  40.         }) 
  41.       } 
  42.     }); 
  43.   } 
  44. }; 
  45. </script> 

 

責任編輯:武曉燕 來源: 前端有道
相關推薦

2011-07-18 09:48:10

jQuery

2023-03-15 08:42:06

form表單設計接口

2016-12-13 13:54:10

EasyUI form數據加載

2009-07-03 13:24:56

JSP表單

2009-07-23 16:59:31

ASP.NET認證Form表單

2021-01-12 09:04:12

Django FormForm組件開發

2009-07-29 16:40:50

Ajax提交asp.n

2009-06-30 15:19:55

Form表單JSP入門

2022-01-25 18:11:55

vdomclassfunction

2024-10-05 00:00:05

高性能分布式IM

2021-02-20 12:34:53

鴻蒙HarmonyOS應用開發

2021-01-14 09:04:27

Django FormForm組件開發

2022-03-09 09:43:01

工具類線程項目

2025-01-13 07:05:00

精簡表單移動端設計表單長表單設計

2023-11-27 08:24:57

FormikReact

2016-09-27 19:28:37

2020-11-02 08:19:18

RPC框架Java

2021-03-18 08:04:54

AQS工具CAS

2022-09-22 12:38:46

antd form組件代碼

2017-03-02 13:31:02

監控系統
點贊
收藏

51CTO技術棧公眾號

久久精品一二三| 99re6这里只有精品| 亚洲成人综合视频| 成人动漫在线观看视频| 四虎精品免费视频| 国产精品66| 国产精品家庭影院| 91精品啪在线观看麻豆免费 | 成人影院网站| 中文字幕不卡在线| 91精品国产综合久久男男| 欧美亚洲日本在线| 亚洲1区在线| 精品福利在线观看| 日韩wuma| 国产99视频在线| 亚洲最新色图| 欧美一区二区播放| 2018国产在线| h网站视频在线观看| 国产一区二区三区美女| 韩剧1988免费观看全集| 大又大又粗又硬又爽少妇毛片 | 免费在线观看视频a| 天天综合网在线| 日本伊人色综合网| 欧美尺度大的性做爰视频| 噜噜噜在线视频| 六九午夜精品视频| 亚洲国产日韩精品| 麻豆91蜜桃| 91亚洲精品国偷拍自产在线观看 | 亚洲精品ady| 中文字幕久久av| 中文字幕在线免费| 99久久综合狠狠综合久久| 国产精品视频1区| 偷偷操不一样的久久| 欧美激情国产在线| 精品国产自在久精品国产| 国产一二三在线视频| 成人高清免费观看mv| 成人黄色在线网站| 91欧美精品午夜性色福利在线| 免费黄色网址在线| 在线精品亚洲| 最好看的2019的中文字幕视频| 性折磨bdsm欧美激情另类| 欧美影视资讯| 欧美成人三级在线播放| 中文字幕乱码视频| 欧美伊人影院| 在线观看国产成人av片| 你懂得在线视频| 亚洲不卡视频| 51精品秘密在线观看| 波多野结衣家庭教师在线播放| 国产人成在线观看| 奇米色一区二区三区四区| 欧美一级黑人aaaaaaa做受| 99鲁鲁精品一区二区三区| 成人三级视频| 亚洲毛片在线看| 内射中出日韩无国产剧情| 成人在线高清免费| 国产精品二区一区二区aⅴ污介绍| 茄子视频成人在线观看| 刘亦菲久久免费一区二区| 国产一区二区在线观看免费| 国产精品一香蕉国产线看观看| 日本一级黄色大片| 在线不卡日本| 黄色在线论坛| 亚洲老司机在线| 久久av喷吹av高潮av| www.久久热.com| 国产精品日产欧美久久久久| 九九久久99| 国产午夜小视频| 欧美成人69| 欧美激情国产高清| 97成人资源站| 欧美片第1页综合| 欧美激情喷水视频| 国产中文字幕免费| 国产精品亚洲综合色区韩国| 欧美在线不卡区| 午夜视频网站在线观看| 美女mm1313爽爽久久久蜜臀| 亚州精品天堂中文字幕| 日本一区二区三区精品| 免费看欧美女人艹b| 国产一区二中文字幕在线看| 99久久亚洲精品日本无码| 国产一区高清在线| av电影成人| 亚洲 欧美 精品| 亚洲国产电影在线观看| ijzzijzzij亚洲大全| 青青在线视频| 国产精品全国免费观看高清| 亚洲一卡二卡| 91精品专区| 一区二区三区不卡在线观看| 农民人伦一区二区三区| 大桥未久在线视频| 日本大香伊一区二区三区| 一区二区久久精品| 国产 日韩 欧美 综合 一区| 亚洲欧美国产精品va在线观看| 亚洲一级理论片| 一区视频在线看| 久久久久久高潮国产精品视| 黄色片网站在线免费观看| 久久久久久久高潮| 91中文在线视频| 色视频精品视频在线观看| 国产精品情趣视频| 日韩日韩日韩日韩日韩| 农村妇女一区二区| 日韩电影网在线| 粉嫩av性色av蜜臀av网站| 亚洲韩日在线| 国产精品自产拍在线观看| 欧美一区,二区| 91小视频在线免费看| 欧美三级午夜理伦三级老人| 自拍偷拍欧美视频| 日韩限制级电影在线观看| 偷拍夫妻性生活| 国产一区二区三区四区三区四| 日本高清+成人网在线观看| 国产免费一级视频| 成人网页在线观看| 一本一生久久a久久精品综合蜜 | 亚洲精品网站在线播放gif| 日本黄色片免费观看| 久久aⅴ国产紧身牛仔裤| 国产精品视频资源| 亚洲色图另类小说| 亚洲欧洲另类国产综合| 国产精品扒开腿做爽爽爽男男 | 视频一区二区中文字幕| 豆国产97在线| 亚乱亚乱亚洲乱妇| 欧美视频在线观看 亚洲欧| 午夜免费福利视频在线观看| 蜜桃久久久久| 欧美黑人又粗大| 国产日韩免费视频| 国产精品久久久久aaaa| 男人揉女人奶房视频60分 | 少妇一级淫片免费放中国 | 久久精品影视大全| 欧美亚洲色图校园春色| 北条麻妃一区二区三区中文字幕| 久久国产乱子伦精品| 国产最新视频在线观看| 国产精品区一区二区三区| 久久精品国产精品亚洲色婷婷| 在线成人免费| 亚洲欧美在线播放| 日韩不卡视频在线| av亚洲精华国产精华精华| 成年人网站国产| 2020国产精品极品色在线观看| 中文字幕亚洲在线| 亚洲欧美综合自拍| heyzo一本久久综合| av无码久久久久久不卡网站| 中文字幕日韩在线| 欧美成人精品h版在线观看| 国产情侣自拍小视频| 中文欧美字幕免费| 91丨九色丨蝌蚪| 最新精品国产| 97碰碰视频| 黄色av网站在线播放| 91精品福利在线一区二区三区 | 久久色在线播放| 99久久国产热无码精品免费| 一区二区三区在线视频观看58| 曰本三级日本三级日本三级| 亚洲精品孕妇| av日韩免费电影| 99re6在线精品视频免费播放| 亚洲久久久久久久久久久| 日本熟女毛茸茸| 国产精品久久三区| 久久出品必属精品| 国一区二区在线观看| 黑人另类av| 国产激情欧美| 欧美极品xxxx| 婷婷婷国产在线视频| 狠狠色噜噜狠狠狠狠97| 久久精品国产亚洲av久| 久久精品国产99久久6| 大桥未久一区二区三区| 黄色成人美女网站| 国产精国产精品| 性爱视频在线播放| 91.麻豆视频| 日本三级网站在线观看| 久久精品视频免费观看| 热久久久久久久久| 亚洲看片一区| 一本一生久久a久久精品综合蜜| 91综合久久爱com| 国产精品久久不能| 日本天码aⅴ片在线电影网站| 亚洲欧美国产日韩中文字幕| 国产精品无码在线播放| 午夜在线电影亚洲一区| 国产性猛交xx乱| 成人黄色综合网站| 污污的网站免费| 99香蕉国产精品偷在线观看| 日本精品二区| 一区二区亚洲视频| 国产精品2018| 美女的胸无遮挡在线观看 | 国产免费一区二区三区| 国产一区二区色噜噜| 久久久亚洲天堂| 黄色在线免费| 中文字幕亚洲一区二区三区五十路| 人妻一区二区三区免费| 色88888久久久久久影院野外| 91视频青青草| 中文字幕av一区 二区| 中文字幕视频观看| 蜜臀av一区二区在线免费观看 | 97偷自拍亚洲综合二区| 欧美精品成人一区二区在线观看 | 精品人妻一区二区三区蜜桃| ●精品国产综合乱码久久久久| 69久久精品无码一区二区| 亚洲美女黄网| 亚洲国产精品久久久久婷婷老年| 视频二区欧美毛片免费观看| 国产成人91久久精品| 日本蜜桃在线观看视频| 中文字幕亚洲精品| 水莓100在线视频| 亚洲电影中文字幕| 亚洲乱码国产乱码精品精软件| 3d成人h动漫网站入口| 青娱乐在线免费视频| 日韩欧美黄色动漫| 久久露脸国语精品国产91| 亚洲美女精品一区| 羞羞在线观看视频| 国产精品蜜臀av| 国产精品久久久视频| 久久久777精品电影网影网 | 成人的网站免费观看| 想看黄色一级片| 久久99精品一区二区三区| 粗暴91大变态调教| 欧美亚韩一区| 成人毛片100部免费看| 区一区二视频| 在线看视频不卡| 不卡视频在线| 中文字幕久精品免| 我不卡伦不卡影院| 天天综合中文字幕| 久久精品久久久| 亚洲国产精品综合| 爽爽窝窝午夜精品一区二区| 鲁鲁狠狠狠7777一区二区| 日韩高清影视在线观看| 欧美二级三级| 成人羞羞视频在线看网址| 奇米精品在线| 91综合久久一区二区| 在线观看av的网址| 影院欧美亚洲| 国语对白做受xxxxx在线中国 | 成熟老妇女视频| 日韩精品午夜视频| 亚洲一区二区福利视频| 国产成人午夜高潮毛片| 中文字幕天堂网| 91蜜桃在线观看| 天天色天天综合| 一区二区三区精品视频在线| 中文字幕第28页| 亚洲午夜一区二区| 免费黄色网址在线| 日韩欧美国产骚| 国产精品欧美综合| 91精选在线观看| 天天干天天色天天| 亚洲精品一二区| 日本午夜在线视频| 色偷偷偷亚洲综合网另类| 精品一性一色一乱农村| 日本最新高清不卡中文字幕| 第84页国产精品| 国产高清精品一区二区| 日韩理论电影院| 国产xxxxx在线观看| 国产乱码精品一区二区三| aaaaa级少妇高潮大片免费看| 一区二区三区四区不卡在线| 中文天堂在线视频| 91精品国产麻豆| 91成人高清| 97视频在线免费观看| 国产亚洲精aa在线看| 九九九九九九精品| 国产综合精品| 日本黄色www| 17c精品麻豆一区二区免费| 欧美一级黄视频| 亚洲精品综合精品自拍| av日韩中文| 成人综合电影| 欧美欧美天天天天操| 亚洲一区二区三区四区精品 | 成人无码精品1区2区3区免费看| 疯狂做受xxxx欧美肥白少妇| 成人毛片在线精品国产| 欧美成人午夜免费视在线看片| 宅男噜噜噜66国产精品免费| 亚洲一区三区视频在线观看| 老司机精品导航| 国产精品嫩草av| 亚洲成年人网站在线观看| 亚洲乱码国产乱码精品精软件| 日韩视频在线观看免费| 日韩一级视频| 制服诱惑一区| 国产在线精品一区二区不卡了| 日韩一卡二卡在线观看| 欧美日韩一区三区四区| aaa日本高清在线播放免费观看| 国产精品美女在线观看| jlzzjlzz亚洲女人| 爱情岛论坛成人| 中文字幕不卡在线| 成人黄色免费网| 亚洲精品v欧美精品v日韩精品| av在线不卡免费| 91久久偷偷做嫩草影院| 国产综合亚洲精品一区二| 丰满饥渴老女人hd| 亚洲综合免费观看高清完整版在线| 超碰在线人人干| 欧美精品日韩www.p站| 欧美成人一级| 国产视色精品亚洲一区二区| 亚洲一区国产| 妺妺窝人体色WWW精品| 欧美日韩三级在线| 黄在线免费观看| 国产高清一区视频| 狠久久av成人天堂| 欧美成人三级在线播放| 亚洲蜜臀av乱码久久精品蜜桃| 国产成人无码av| 北条麻妃在线一区二区| av成人男女| 国产精品国产亚洲精品看不卡| 久久亚洲精品国产精品紫薇| 亚洲 小说区 图片区| 久久影院中文字幕| julia中文字幕一区二区99在线| 人妻熟妇乱又伦精品视频| 国产欧美一区二区三区网站| 亚洲综合网av| 国产一区二区三区免费视频| 成人午夜毛片| 无码熟妇人妻av在线电影| 久久久综合网站| 国产免费一区二区三区最新不卡 | 国产成人自拍视频在线| 亚洲а∨天堂久久精品9966| a国产在线视频| 亚洲精品乱码视频| 国产一区在线不卡| 精品欧美一区二区三区免费观看| 亚洲欧美成人网| 奇米一区二区| 亚洲免费av一区二区三区| 一区二区三区四区在线| 国产色在线 com| 51精品国产人成在线观看| 久久亚洲视频| 91视频免费在线看| 亚洲夜晚福利在线观看| 欧美一级大片在线视频| aa免费在线观看| 亚洲精品第一国产综合野| 天天操天天舔天天干| 国产精品欧美久久久| 国产亚洲精品自拍| 少妇影院在线观看|