Vue中添加手機(jī)驗(yàn)證碼組件功能操作方法
什么是組件:
組件是Vue.js最強(qiáng)大的功能之一。組件可以擴(kuò)展HTML元素,封裝可重用的代碼。在較高層面上,組件是自定義的元素,Vue.js的編譯器為它添加特殊功能。在有些情況下,組件也可以是原生HTML元素的形式,以is特性擴(kuò)展。
寫在前面:
今天要實(shí)現(xiàn)的功能是在 完善個(gè)人信息頁面(vue)中添加手機(jī)驗(yàn)證碼組件,當(dāng)用戶點(diǎn)擊 手機(jī)選項(xiàng)時(shí),彈出獲取驗(yàn)證碼組件,完成驗(yàn)證手機(jī)的功能:
這里考慮到功能的復(fù)用,我把當(dāng)前彈出手機(jī)驗(yàn)證碼的操作放在了單獨(dú)的組件中:
<template > <div> <div class="bind-phone-box"> <div class="phone-title">綁定手機(jī)</div> <div class="phone-content" v-on:click.stop="fillContent"> <input v-model="phoneNum" class="phone-num" type="text" placeholder="請(qǐng)輸入手機(jī)號(hào)碼"> <div class="verify-box clearfix"> <input class="verify-num" v-model="verifyNum" type="text" placeholder="請(qǐng)輸入驗(yàn)證碼"><input v-on:click="sendSmsCode" class="verify-btn" type="button" v-model="btnContent" v-bind="{'disabled':disabled}"> </div> </div> <div class="phone-submit clearfix"> <input class="submit-cancel" type="button" value="取消"> <input class="submit-confirm" v-on:click.stop="verificationCode" type="button" value="確定"> </div> </div> </div> </template>
并把當(dāng)前組件放在需要使用它的組件中,這里需要注意的是,在控制 綁定手機(jī)組件的顯示和隱藏的時(shí)候,出現(xiàn)了一個(gè)小問題:點(diǎn)擊 “手機(jī)” 按鈕需要顯示當(dāng)前組件,但什么時(shí)候去隱藏當(dāng)前的組件呢,我是這樣想的:
情況1:用戶已經(jīng)輸完了手機(jī)號(hào)并通過了驗(yàn)證,點(diǎn)擊"確定"按鈕的時(shí)候需要隱藏當(dāng)前組件;
情況2:用戶沒有完成手機(jī)驗(yàn)證,但又不想繼續(xù),點(diǎn)擊當(dāng)前手機(jī)的任意位置(除去“確定”按鈕、手機(jī)號(hào)輸入框和 驗(yàn)證碼輸入框)都應(yīng)該隱藏當(dāng)前組件;
基于這兩種情況,我在父組件中給子組件添加了一個(gè)容器:
<li class="mui-table-view-cell phone-li"> <span v-on:click="verifyPhone" class="mui-navigate-right"><span>手機(jī)號(hào)<span class="necessary">*</span></span></span> <!-- 手機(jī)驗(yàn)證碼 --> <div class="shade" v-show="verifyShow" v-on:click="verifyPhone"> <!-- 手機(jī)驗(yàn)證碼子組件 --> <phoneVerify></phoneVerify> </div> </li>
通過控制 父div 的顯示狀態(tài)來控制子組件的顯示狀態(tài),
methods:{ // 手機(jī)號(hào)驗(yàn)證 verifyPhone(){ this.verifyShow=!this.verifyShow; }, },
在驗(yàn)證組件中的邏輯控制如下:
<script> // 引入彈窗組件 import { Toast } from 'mint-ui'; export default { data(){ return { phoneNum:"", //手機(jī)號(hào) verifyNum:"", //驗(yàn)證碼 btnContent:"獲取驗(yàn)證碼", //獲取驗(yàn)證碼按鈕內(nèi)文字 time:0, //發(fā)送驗(yàn)證碼間隔時(shí)間 disabled:false //按鈕狀態(tài) } }, created(){ }, methods:{ // 獲取驗(yàn)證碼 sendSmsCode(){ var reg=11&& /^((13|14|15|17|18)[0-9]{1}\d{8})$/;//手機(jī)號(hào)正則驗(yàn)證 var phoneNum = this.phoneNum; if(!phoneNum){//未輸入手機(jī)號(hào) Toast("請(qǐng)輸入手機(jī)號(hào)碼"); return; } if(!reg.test(phoneNum)){//手機(jī)號(hào)不合法 Toast("您輸入的手機(jī)號(hào)碼不合法,請(qǐng)重新輸入"); } this.time = 60; this.timer(); // 獲取驗(yàn)證碼請(qǐng)求 var url = 'http://bosstan.asuscomm.com/api/common/sendSmsCode'; this.$http.post(url,{username:phoneNum},{emulateJSON:true}).then((response)=>{ console.log(response.body); }); }, timer(){ if(this.time>0){ this.time--; this.btnContent = this.time+"s后重新獲取"; this.disabled = true; var timer = setTimeout(this.timer,1000); }else if(this.time == 0){ this.btnContent = "獲取驗(yàn)證碼"; clearTimeout(timer); this.disabled = false; } }, // 驗(yàn)證驗(yàn)證碼 verificationCode(){ var phoneNum = this.phoneNum;//手機(jī)號(hào) var verifyNum = this.verifyNum;//驗(yàn)證碼 var url = 'http://bosstan.asuscomm.com/api/common/verificationCode'; this.$http.post(url,{ username:phoneNum, code:verifyNum },{ emulateJSON:true }).then((response)=>{ console.log(response.body); }); }, fillContent(){ // console.log("fillContent"); } } } </script>
其中,獲取驗(yàn)證碼和驗(yàn)證短信驗(yàn)證碼的邏輯還沒有寫入。
PS:下面給大家補(bǔ)充一段vue短信驗(yàn)證碼組件實(shí)例代碼:
Vue.component('timerBtn',{ template: '<button v-on:click="run" :disabled="disabled || time > 0">{{ text }}</button>', props: { second: { type: Number, default: 60 }, disabled: { type: Boolean, default: false } }, data:function () { return { time: 0 } }, methods: { run: function () { this.$emit('run'); }, start: function(){ this.time = this.second; this.timer(); }, stop: function(){ this.time = 0; this.disabled = false; }, setDisabled: function(val){ this.disabled = val; }, timer: function () { if (this.time > 0) { this.time--; setTimeout(this.timer, 1000); }else{ this.disabled = false; } } }, computed: { text: function () { return this.time > 0 ? this.time + 's 后重獲取' : '獲取驗(yàn)證碼'; } } });
<timer-btn ref="timerbtn" class="btn btn-default" v-on:run="sendCode" ></timer-btn>
var vm = new Vue({ el:'#app', methods:{ sendCode:function(){ vm.$refs.timerbtn.setDisabled(true); //設(shè)置按鈕不可用 hz.ajaxRequest("sys/sendCode?_"+$.now(),function(data){ if(data.status){ vm.$refs.timerbtn.start(); //啟動(dòng)倒計(jì)時(shí) }else{ vm.$refs.timerbtn.stop(); //停止倒計(jì)時(shí) } }); }, } });
總結(jié)
以上所述是小編給大家介紹的Vue中添加手機(jī)驗(yàn)證碼組件功能操作方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Vue插件之滑動(dòng)驗(yàn)證碼用法詳解
- Vue插件之滑動(dòng)驗(yàn)證碼
- 簡(jiǎn)單實(shí)現(xiàn)vue驗(yàn)證碼60秒倒計(jì)時(shí)功能
- VUE實(shí)現(xiàn)圖片驗(yàn)證碼功能
- vue+element-ui集成隨機(jī)驗(yàn)證碼+用戶名+密碼的form表單驗(yàn)證功能
- vue 實(shí)現(xiàn)通過手機(jī)發(fā)送短信驗(yàn)證碼注冊(cè)功能
- vue生成隨機(jī)驗(yàn)證碼的示例代碼
- Vue 實(shí)現(xiàn)登錄界面驗(yàn)證碼功能
- vue實(shí)現(xiàn)登錄頁面的驗(yàn)證碼以及驗(yàn)證過程解析(面向新手)
- vue驗(yàn)證碼(identify)插件使用方法詳解
相關(guān)文章
基于Element-Ui封裝公共表格組件的詳細(xì)圖文步驟
在平時(shí)開發(fā)的時(shí)候很多情況都會(huì)使用到表格和分頁功能,下面這篇文章主要給大家介紹了關(guān)于如何基于Element-Ui封裝公共表格組件的詳細(xì)圖文步驟,需要的朋友可以參考下2022-09-09vue+Java后端進(jìn)行調(diào)試時(shí)解決跨域問題的方式
今天在開發(fā)中遇到有點(diǎn)小問題,vue+Java后端進(jìn)行調(diào)試時(shí)如何解決跨域問題,下面小編給大家分享解決方法,感興趣的朋友一起看看吧2017-10-10vue-cli4.x創(chuàng)建企業(yè)級(jí)項(xiàng)目的方法步驟
這篇文章主要介紹了vue-cli4.x創(chuàng)建企業(yè)級(jí)項(xiàng)目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06前端低代碼form-generator實(shí)現(xiàn)及新增自定義組件詳解
這篇文章主要給大家介紹了關(guān)于前端低代碼form-generator實(shí)現(xiàn)及新增自定義組件的相關(guān)資料,form-generator是一個(gè)開源的表單生成器,可以幫助我們快速構(gòu)建各種表單頁面,需要的朋友可以參考下2023-11-11vue 彈窗時(shí) 監(jiān)聽手機(jī)返回鍵關(guān)閉彈窗功能(頁面不跳轉(zhuǎn))
這篇文章主要介紹了vue 彈窗時(shí) 監(jiān)聽手機(jī)返回鍵關(guān)閉彈窗功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值(頁面不跳轉(zhuǎn)) ,需要的朋友可以參考下2019-05-05elementUI實(shí)現(xiàn)級(jí)聯(lián)選擇器
這篇文章主要為大家詳細(xì)介紹了elementUI實(shí)現(xiàn)級(jí)聯(lián)選擇器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11Vue3中多個(gè)彈窗同時(shí)出現(xiàn)的解決思路
這篇文章主要介紹了Vue3中多個(gè)彈窗同時(shí)出現(xiàn)的解決思路,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02Vue3中Watch、Watcheffect、Computed的使用和區(qū)別解析
Watch、Watcheffect、Computed各有優(yōu)劣,選擇使用哪種方法取決于應(yīng)用場(chǎng)景和需求,watch?適合副作用操作,watchEffect適合簡(jiǎn)單的自動(dòng)副作用管理,computed?適合聲明式的派生狀態(tài)計(jì)算,本文通過場(chǎng)景分析Vue3中Watch、Watcheffect、Computed的使用和區(qū)別,感興趣的朋友一起看看吧2024-07-07