vue elementui form表單驗證


最近我們公司將前端框架由easyui 改為 vue+elementui 。自學vue兩周 就開始了爬坑之路。業余時間給大家分享一下心得,技術新手加上第一次分享(小激動),有什么不足的地方歡迎大家指正,多多交流才能共同進步!

1.問題 我們公司的項目比較大 表格 表單的頁面都不勝數 ,基於此封裝了一些 可復用的代碼。

2.分析  vue給了我們不一樣的前端代碼體驗  element ui 給我們一套功能強大的組件 減少了我們大量的開發時間 。雙劍合璧 天下無敵!  但每個公司的代碼風格不同  用戶的要求也比較刁端 ui團隊設計完美 我們怎樣才能用這個兩把劍闖出自己的江湖 就需要大家好好琢磨了。

廢話不多說!進入正題 

form表單驗證規則的封裝 

  1.ellementui的處理    1. Form 組件上一次性傳遞所有的驗證規則  2 .單個的表單域上傳遞屬性的驗證規則 。

   

 1 <el-form :model="dynamicValidateForm" ref="dynamicValidateForm" label-width="100px" class="demo-dynamic">
 2   <el-form-item
 3     prop="email"
 4     label="郵箱"
 5     :rules="[
 6       { required: true, message: '請輸入郵箱地址', trigger: 'blur' },
 7       { type: 'email', message: '請輸入正確的郵箱地址', trigger: 'blur,change' }
 8     ]"
 9   >
10   <el-input v-model="dynamicValidateForm.mobil"></el-input>
11  </el-form-item>
12  <el-form-item 
13     label="姓名:" 
14     prop="name" 
15     :rules="[{ required: true, message: '請輸入姓名', trigger: 'blur' }]">
16  <el-input v-model="dynamicValidateForm.name"></el-input>
17 </el-form-item>
18 <el-form-item label="手機號:" prop="mobil" 
19     :rules="filter_rules({required:true,type:'mobile'})">
20     <el-input v-model="dynamicValidateForm.mobil"></el-input>
21 </el-form-item>
22 
23 </el-form>

觀察上面的代碼 有一個共性 單個的表單域上傳遞屬性的驗證規則 ,給rules 屬性一個數組 

重點來了 19行代碼是什么意思???? 

 這就是我們封裝的全局可復用的方法   傳入需要的參數,你就可以得到你想要的驗證規則 rules 數組

在我們的工具包建一個 js文件  我們的全局方法就有了

 1 exports.install = function (Vue, options) {
 2 
 3     Vue.prototype.filter_rules = function (item){   
 4     
 5         return  [{},{}]
 6        
 7      }
 8     
 9 
10 }    

還要在main.js 中注冊 

下面分享下我的js文件

  1 import { validateMoneyNumber,qq,mobile,regexn,integer} from '@/utils/validate'
  2 
  3 exports.install = function (Vue, options) {
  4     
  5     
  6     /**
  7      * 注意:  定義type 規則時 不用做非空驗證 
  8      *        只需要傳入 required:true 即可
  9      * */
 10     /*保留兩位小數*/
 11     const isvalidateMoney = (rule, value, callback) => {
 12         if(value != null && value != "") {
 13             if(!validateMoneyNumber(value)) {
 14             callback(new Error('請輸入正確的數字,最多保留兩位小數!'))
 15             } else {
 16                 callback()
 17             }
 18         }
 19         else{
 20             callback();
 21         }
 22     }
 23     /*驗證QQ號碼*/
 24     const isvalidateQQ= (rule, value, callback) => {        
 25         if(value != null && value != "") {
 26             if(!qq(value)) {
 27                 callback(new Error('您輸入的QQ號不正確!'))
 28             } else {
 29                 callback()
 30             }
 31         }
 32         else{
 33             callback();
 34         }
 35     }
 36     /*驗證手機號*/
 37        const isvalidateMobile= (rule, value, callback) => {        
 38         if(value != null && value != "") {
 39             if(!mobile(value)) {
 40                 callback(new Error('您輸入的手機號不正確!'))
 41             } else {
 42                 callback()
 43             }
 44         }
 45         else{
 46             callback();
 47         }
 48     }
 49        
 50        /*含有非法字符(只能輸入字母、漢字)*/
 51        const isvalidateRegexn= (rule, value, callback) => {        
 52         if(value != null && value != "") {
 53             if(!regexn(value)) {
 54                 callback(new Error('含有非法字符(只能輸入字母、漢字)!'))
 55             } else {
 56                 callback()
 57             }
 58         }
 59         else{
 60             callback();
 61         }
 62     }
 63         /*請輸入正整數*/
 64        const isvalidateInteger= (rule, value, callback) => {        
 65         if(value != null && value != "") {
 66             if(!integer(value)) {
 67                 callback(new Error('請輸入正整數!'))
 68             } else {
 69                 callback()
 70             }
 71         }
 72         else{
 73             callback();
 74         }
 75     }
 76     
 77     
 78     
 79     
 80     /**
 81      * 參數 item 
 82      * required true  必填項
 83      * maxLength  字符串的最大長度
 84      * min 和 max 必須同時給 min < max  type=number
 85      * type 手機號 mobile
 86      *      郵箱   email
 87      *      網址   url 
 88      *      各種自定義類型   定義在 src/utils/validate 中    持續添加中.......
 89      * */
 90     
 91     Vue.prototype.filter_rules = function (item){
 92         let rules = [];
 93         if(item.required){
 94            rules.push({ required: true, message: '該輸入項為必填項!', trigger: 'blur' });
 95         }
 96         if(item.maxLength){
 97            rules.push({ min:1,max:item.maxLength, message: '最多輸入'+item.maxLength+'個字符!', trigger: 'blur' })
 98         }
 99         if(item.min&&item.max){       
100            rules.push({ min:item.min,max:item.max, message: '字符長度在'+item.min+'至'+item.max+'之間!', trigger: 'blur' })
101         }
102         if(item.type){
103             let type = item.type;
104             switch(type) {
105                 case 'email':
106                     rules.push({ type: 'email', message: '請輸入正確的郵箱地址', trigger: 'blur,change'  });
107                     break;
108                 case 'qq':
109                     rules.push( { validator: isvalidateQQ, trigger: 'blur,change' });
110                     break;
111                 case 'mobile':
112                     rules.push( { validator: isvalidateMobile, trigger: 'blur,change' });
113                     break;    
114                 case 'regexn':
115                     rules.push( { validator: isvalidateRegexn, trigger: 'blur,change' });
116                     break;    
117                 case 'integer':
118                     rules.push( { validator: isvalidateInteger, trigger: 'blur,change' });
119                     break;        
120                 default:
121                     rule.push({});
122                     break;
123             }
124         }
125        
126      
127         return rules;
128     };
129 };

看明白了嗎  第一行  是引入各種正則表達式   然后自定義校驗規則    。  傳入你自定義的參數 就可以拿到你想要的規則   (很熟悉吧  參考 easyui 表單驗證)

下面是效果

歡迎來交流哦!

 

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM