Element UI:Vue 實(shí)現(xiàn)前端表單依據(jù)下拉框動(dòng)態(tài)校驗(yàn)

真實(shí)開發(fā)場(chǎng)景:最近入職實(shí)習(xí)秩伞,公司開發(fā)模塊有個(gè)簡(jiǎn)單的需求:前端表單根據(jù)下拉選項(xiàng)的類別進(jìn)行校驗(yàn) 尿这;并提示不同的校驗(yàn)信息切油。思考過后發(fā)現(xiàn)確實(shí)是常用的功能只磷,如錄入的賬號(hào)可綁定郵箱经磅、QQ、手機(jī)等不同信息時(shí)的校驗(yàn)钮追,這些都需要前端進(jìn)行動(dòng)態(tài)校驗(yàn)预厌,而不是后端處理

需求分析

  • 改變下拉框 選項(xiàng),前端校驗(yàn)對(duì)應(yīng)的類型是否滿足規(guī)則
  • 需要校驗(yàn)地址類型:IPv4元媚,IPv6 和 域名 (效果圖如下)
效果圖1
效果圖2

實(shí)現(xiàn)思路

  • 在el-select 下拉框上綁定change 響應(yīng)事件轧叽,在選項(xiàng)內(nèi)容改變時(shí)觸發(fā)
  • 編寫change的回調(diào)函數(shù),serverAddrChanged(value)刊棕,其中參數(shù)是下拉框雙向綁定的value值
  • 將表單校驗(yàn)規(guī)則聲明為全局屬性炭晒,通過prop屬性 和 value值動(dòng)態(tài)設(shè)置校驗(yàn)規(guī)則

核心代碼

前端下拉框,與規(guī)則聲明
<el-form :rules="rules1">
<!--.............-->
  <el-form-item label="地址類型:" prop="serverAddrType"> 
   <el-select class="wh200" @change="serverAddrChanged" v-model="serverForm.serverAddrType" placeholder="選擇地址類型" clearable="" filterable=""> 
      <!-- 此處選項(xiàng)是value 到 name 的一個(gè)映射(展現(xiàn)的是name甥角,真實(shí)值為value)-->
    <el-option v-for="item in serverAddrType_opt" :key="item.codeValue" :label="item.codeName" :value="item.codeValue"></el-option> 
   </el-select> 
  </el-form-item>
    <el-form-item label="IP或域名:" prop="serverIp">
        <el-input v-model.trim="serverForm.serverIp" placeholder="請(qǐng)輸入IP或域名" ></el-input>
    </el-form-item>
</el-form>

<script>
  data(){
    return{
      // ....
      rules1: {}
    }
  }
</script>
類型修改后觸發(fā)函數(shù)
        // 地址類型下拉框 改變
        serverAddrChanged(value){
            //value === codeValue 改變鍵入規(guī)則
            this.rules1['serverIp'] = [];
            let pt = '';
            let msg = '';
            if(value === 2570001){
                // ipv4
                msg = '請(qǐng)輸入正確的IPv4地址';
                pt = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[09][0-9]|[1-9][0-9]|[0-9])$/;
            }else if(value === 2570002){
                msg = '請(qǐng)輸入正確的IPv6地址';
                pt = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/
            }else{
                msg = '請(qǐng)輸入正確的域名';
                pt = /^([H|h][T|t][T|t][P|p][S|s]?:\/\/)[^\s]+/;
            }
            this.rules1['serverIp'].push({required: true, message: msg, pattern: pt, trigger: "blur"});  
        }

注意事項(xiàng)(坑)

  • 每次編輯或添加服務(wù)時(shí)网严,前端的校驗(yàn)值需清空(否則會(huì)記錄上次的錯(cuò)誤提示,用戶還沒操作就爆紅)
    實(shí)現(xiàn)很簡(jiǎn)單嗤无,內(nèi)置的resetFields() 清空校驗(yàn)信息
            this.$nextTick(() => {
                this.$refs.serverForm.resetFields(); 
            });
  • 由于校驗(yàn)是在下拉框改變時(shí)觸發(fā)事件初始化的震束,所以在編輯某個(gè)服務(wù)時(shí)默認(rèn)狀態(tài)下無校驗(yàn),也就是說這時(shí)前端的校驗(yàn)就失效了当犯,要做的就是在回顯數(shù)據(jù)的同時(shí)垢村,依靠當(dāng)前回顯的類型,初始化表單的校驗(yàn)規(guī)則
            // 下拉正則回顯
            this.serverAddrChanged(this.serverForm["serverAddrType"]);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嚎卫,一起剝皮案震驚了整個(gè)濱河市嘉栓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖侵佃,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件麻昼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡趣钱,警方通過查閱死者的電腦和手機(jī)涌献,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來首有,“玉大人燕垃,你說我怎么就攤上這事【” “怎么了卜壕?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)烙常。 經(jīng)常有香客問我轴捎,道長(zhǎng),這世上最難降的妖魔是什么蚕脏? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任侦副,我火速辦了婚禮,結(jié)果婚禮上驼鞭,老公的妹妹穿的比我還像新娘秦驯。我一直安慰自己,他們只是感情好挣棕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布译隘。 她就那樣靜靜地躺著,像睡著了一般洛心。 火紅的嫁衣襯著肌膚如雪固耘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天词身,我揣著相機(jī)與錄音厅目,去河邊找鬼。 笑死法严,一個(gè)胖子當(dāng)著我的面吹牛璧瞬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播渐夸,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼渔欢!你這毒婦竟也來了墓塌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎苫幢,沒想到半個(gè)月后访诱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡韩肝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年触菜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哀峻。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涡相,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出剩蟀,到底是詐尸還是另有隱情催蝗,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布育特,位于F島的核電站丙号,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏缰冤。R本人自食惡果不足惜犬缨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望棉浸。 院中可真熱鬧怀薛,春花似錦、人聲如沸涮拗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽三热。三九已至鼓择,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間就漾,已是汗流浹背呐能。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抑堡,地道東北人摆出。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像首妖,于是被迫代替她去往敵國(guó)和親偎漫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容