詳解element-ui設置下拉選擇切換必填和非必填(轉)


https://www.jb51.net/article/163201.htm

這篇文章主要介紹了詳解element-ui設置下拉選擇切換必填和非必填,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨着小編來一起學習學習吧

 

➢ 需求

默認都是必選

下拉選擇的時候

選擇必填,活動名稱為必填,需要校驗和顯示*

選擇非必填,活動名稱不做校驗,隱藏*

➢ 初始校驗規則

經測試,網上其他的方式都沒有實現需求,動態切換rules中的required沒有作用

因為按照以下的寫法的話,element-ui在組件初始化后校驗規則就定型了,切換也沒用

1
2
3
4
5
6
7
8
rules: {
   name: [
     { required: true , message: "請輸入名稱" , trigger: "blur" }
   ],
   region: [
     { required: true , message: "請選擇類型" , trigger: "blur" }
   ]
}

➢ 解決方案

第一步:

去除rules中需要動態校驗的字段規則

去除name

1
2
3
4
5
rules: {
   region: [
     { required: true , message: "請選擇類型" , trigger: "blur" }
   ]
}

第二步:

在字段為nameform-item上,添加required屬性

下面代碼isHaveTo為新字段,根據下拉框選擇的值來決定是為true還是false

1
2
3
<el-form-item label= "活動名稱" prop= "name" :required= "isHaveTo" >
   <el-input v-model= "ruleForm.name" ></el-input>
</el-form-item>

第三步:

計算屬性,新增字段isHaveTo

下拉選擇框非必須是為1,其他都是必填,包括默認

1
2
3
<el-form-item label= "活動名稱" prop= "name" :required= "isHaveTo" >
   <el-input v-model= "ruleForm.name" ></el-input>
</el-form-item>

效果如圖:

下拉切換,*號顯隱,提交時也有不同規則

注意,新的問題來了

在選擇必填時,沒有了之前的錯誤提示文字,而是element自帶的提示

第四步:

設置錯誤提示

使用自定義函數控制流程

name字段重新加回去rules

注意是函數{ validator: validateName }

1
2
3
4
5
6
rules: {
   name: [{ validator: validateName }],
   region: [
     { required: true , message: "請選擇類型" , trigger: "blur" }
   ]
}

然后設置函數validateName

可以看到,必填時按照我們設置的提示語提示,非必填時,校驗通過

貼上代碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
data() {
   // 驗證活動名稱的函數
   let validateName = (rule, value, callback) => {
     // 當活動名稱為空值且為必填時,拋出錯誤,反之通過校驗
     if ( this .ruleForm.name === "" && this .isHaveTo) {
       callback( new Error( "請輸入活動名稱" ));
     } else {
       callback();
     }
   };
   return {
     ruleForm: {
       name: "" ,
       region: ""
     },
     rules: {
       name: [{ validator: validateName }],
       region: [
         { required: true , message: "請選擇類型" , trigger: "blur" }
       ]
     }
   };
},

➢ 完整demo代碼

demo使用vue-cli,引入element-ui

核心代碼參考如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<template>
   <div>
     <el-form
       :model= "ruleForm"
       :rules= "rules"
       ref= "ruleForm"
       label-width= "100px"
       class= "demo-ruleForm"
     >
       <el-form-item label= "活動名稱" prop= "name" :required= "isHaveTo" >
         <el-input v-model= "ruleForm.name" ></el-input>
       </el-form-item>
       <el-form-item label= "活動區域" prop= "region" >
         <el-select v-model= "ruleForm.region" placeholder= "請選擇活動區域" style= "width:100%" >
           <el-option label= "必填" value= "0" ></el-option>
           <el-option label= "非必填" value= "1" ></el-option>
         </el-select>
       </el-form-item>
       <el-form-item>
         <el-button type= "primary" @click= "submitForm('ruleForm')" >立即創建</el-button>
       </el-form-item>
     </el-form>
   </div>
</template>
 
<script>
export default {
   name: "HelloWorld" ,
   data() {
     // 驗證活動名稱的函數
     let validateName = (rule, value, callback) => {
       // 當活動名稱為空值且為必填時,拋出錯誤,反之通過校驗
       if ( this .ruleForm.name === "" && this .isHaveTo) {
         callback( new Error( "請輸入活動名稱" ));
       } else {
         callback();
       }
     };
     return {
       ruleForm: {
         name: "" ,
         region: ""
       },
       rules: {
         name: [{ validator: validateName }],
         region: [
           { required: true , message: "請選擇類型" , trigger: "blur" }
         ]
       }
     };
   },
   computed: {
     isHaveTo: function () {
       return this .ruleForm.region !== `1`;
     }
   },
   methods: {
     submitForm(formName) {
       this .$refs[formName].validate(valid => {
         if (valid) {
           console.log(`已提交表單`);
         } else {
           console.log( "error submit!!" );
           return false ;
         }
       });
     }
   }
};
</script>


免責聲明!

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



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