• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

    vue2之簡易的pc端短信驗證碼的問題及處理方法

    來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 21:55:44
    文檔

    vue2之簡易的pc端短信驗證碼的問題及處理方法

    vue2之簡易的pc端短信驗證碼的問題及處理方法: <提示語部分不要在意(非重點(diǎn)部分)> 簡單說下布局(采用的是 vue的element ui的ui框架 )進(jìn)行布局操作的 子組件模板部分如下(code部分是很基礎(chǔ)的) <template> <div class=forget> <el-dialog tit
    推薦度:
    導(dǎo)讀vue2之簡易的pc端短信驗證碼的問題及處理方法: <提示語部分不要在意(非重點(diǎn)部分)> 簡單說下布局(采用的是 vue的element ui的ui框架 )進(jìn)行布局操作的 子組件模板部分如下(code部分是很基礎(chǔ)的) <template> <div class=forget> <el-dialog tit

    <提示語部分不要在意(非重點(diǎn)部分)>

    簡單說下布局(采用的是 vue的element ui的ui框架 )進(jìn)行布局操作的

    子組件模板部分如下(code部分是很基礎(chǔ)的)

    <template>
     <div class="forget">
     <el-dialog title="修改新密碼" :visible.sync="dialog.visible"
     :close-on-click-modal="false"
     :close-on-press-escape="false"
     >
     <el-form :model="dialog.ruleForm" status-icon :rules="rules" :ref="dialog.ruleForms"
    
     label-width="100px" class="demo-ruleForm">
     <el-form-item label="手機(jī)號碼" prop="phone" required>
     <el-input type="text" v-model.number="dialog.ruleForm.phone" autocomplete="off"
     :clearable="true"
     ></el-input>
     </el-form-item>
     <el-form-item label="手機(jī)驗證碼"prop="code" required>
     <div class="send-code">
     <el-input type="text" v-model="dialog.ruleForm.code" autocomplete="off"
     maxlength="6"
     show-word-limit
     :clearable="true"
     ></el-input>
     <el-link
    
     :style="{color:dialog.ruleForm.phone.toString().length===11?'#222':'#999'}"
     type="info" :underline="false"
     :disabled="getDisabled"
     @click="sendCode({
     phone:dialog.ruleForm.phone,sendCode:dialog.ruleForm.sendCode
     })"
     >{{dialog.ruleForm.sendCode}}</el-link>
     </div>
     </el-form-item>
     <el-form-item label="新密碼" prop="newPwd" required>
     <el-input :clearable="true" type="password" v-model="dialog.ruleForm.newPwd"></el-input>
     </el-form-item>
     </el-form>
     <div slot="footer" class="dialog-footer">
     <el-button @click="cancel">取 消</el-button>
     <el-button type="primary" @click="determine(dialog.ruleForms)"
     :loading="dialog.ruleForm.loading"
     >{{dialog.ruleForm.loadingText}}</el-button>
     </div>
     </el-dialog>
     </div>
    </template>

    子組件邏輯部分如下(code部分是很基礎(chǔ)的)

    在@/utils/validate.js中的使用正則代碼

    // 驗證手機(jī)號碼
    export const validatPhone = /^(^(([0\+]\d{2,3}-)?(0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$)|(13[0-9]|14[5-9]|15[012356789]|166|17[0-8]|18[0-9]|19[8-9])[0-9]{8}$/
    //驗證密碼
    export const validatePassword = /^(?=.*\d)(?=.*[a-zA-Z]).{5,20}$/

    <script>
     import {validatPhone,validatePassword} from '@/utils/validate'
     export default {
     props:{
     dialog:{
     type:Object,
     default: {}
     },
     },
     name: "Forget",
     data(){
     // 使用正則進(jìn)行驗證手機(jī)號碼
     const validatePhone = (rule, value, callback) => {
     if (!value) {
     return callback(new Error('請輸入手機(jī)號碼'));
     }
     else {
     if (!validatPhone.test(value)) {
     callback(new Error('請輸入手機(jī)號碼'));
     return
     }
     callback();
     }
     };
     // 使用進(jìn)行驗證手機(jī)驗證碼
     const validateCode = (rule, value, callback) => {
     if (value === '') {
     return callback(new Error('請輸入驗證碼'));
     } else {
     //真正環(huán)境請修改成自己的邏輯即可
     if (this.dialog.ruleForm.code !== '123456') {
     callback(new Error('驗證碼失誤,請重新輸入'))
     // this.dialog.ruleForm.code = ''
     return
     }
     callback();
     }
     };
     // 使用正則進(jìn)行驗證密碼
     const validatenewPwd = (rule, value, callback) => {
     if (value === '') {
     callback(new Error('請輸入密碼'));
     return
     } else if (!validatePassword.test(value)) {
     return callback(new Error('新密碼不合法'));
     } else {
     callback();
     }
     };
     return {
     rules:{ //驗證表單元素中的規(guī)則
     phone:[
     { validator: validatePhone, trigger: ['blur','change'] }
     ],
     code:[
     { validator: validateCode, trigger: ['blur','change'] }
     ],
     newPwd:[
     { validator: validatenewPwd, trigger: ['blur','change'] }
     ],
     },
     timer: null//操作定時器
    
     }
     },
     computed:{
     //getDisabled() 當(dāng)手機(jī)號碼的長度等于11位和點(diǎn)擊驗證碼狀態(tài)為false時,則可以進(jìn)行倒計時操作 
     getDisabled(){
     let phone= this.dialog.ruleForm.phone
     const isChick = this.dialog.ruleForm.isChick
     if(phone.toString().length === 11 && isChick ===false){
     return false
     }
     else {
     // this.dialog.ruleForm.disabled = true
     return true
     }
    
     }
     },
     methods:{
     // 發(fā)送驗證碼
     sendCode(opt){
     this.$emit('sendCode',opt)
     },
     // 點(diǎn)擊取消按鈕時觸發(fā)
     cancel(){
     this.$emit('cancel')
     },
     // 點(diǎn)擊確定按鈕時觸發(fā)
     determine(resf){
    
     this.$refs[resf].validate((valid) => {
     if (valid) {
     this.$emit('determine',resf)
     } else {
     console.log('error submit!!');
     return false;
     }
     });
    
     },
     }
     }
    </script>

    子組件邏輯部分如下(code部分是很基礎(chǔ)的)

    <style scoped lang="scss">
     .forget{
     /deep/ .el-dialog__wrapper{
     .el-dialog{
     max-width: 500px;
     .el-dialog__header{
     text-align: center;
     }
     }
     .demo-ruleForm{
     .el-form-item__content{
     max-width:100%
     }
     }
     .el-dialog__body{
     .el-form-item{
     text-align: center;
     }
     }
     }
     .send-code{
     display: flex;flex: 1;justify-content: space-evenly;
     /deep/ .el-input{
     margin-right: 12px
     }
     /deep/ .el-link{
     white-space: nowrap;
     display: inline-block;
     line-height: 1;
     cursor: pointer;
     background: #fff;
     border: 1px solid #dcdfe6;
     color: #606266;
     -webkit-appearance: none;
     text-align: center;
     box-sizing: border-box;
     outline: none;
     margin: 0;
     transition: .1s;
     font-weight: 500;
     -moz-user-select: none;
     -webkit-user-select: none;
     -ms-user-select: none;
     padding: 12px 10px;
     font-size: 14px;
     border-radius: 4px;
     }
     }
     .dialog-footer{
     display: flex;
     flex: 1;
     justify-content: center;
     /deep/ .el-button{
     flex: 0 0 40%;
     }
     }
     }
    </style>

    父組件中的模板部分

    <template> <forget :dialog="dialog"@cancel="dialog.visible= false" @determine="determine" @sendCode="sendCode"></forget>
    </template>

    為什么需要使用set這個api方法呢

    如下截圖


    可以學(xué)習(xí)下這個鏈接的使用set的例子

    全局變量globals.js文件

    [vue-set]的文檔( cn.vuejs.org/v2/api/#Vue… )

    說明(*****向響應(yīng)式對象中添加一個屬性,并確保這個新屬性同樣是響應(yīng)式的,且觸發(fā)視圖更新。)

    export default {
     //判斷是否點(diǎn)擊了
     isChick(data,key='disabled',count=0){
     data[key] =true
     if(count<=0){
     data[key] =false
     }
     },
     //此處是重點(diǎn) 使用的vue官網(wǎng)給的api方法
     [vue-set](https://cn.vuejs.org/v2/api/#Vue-set)
     sendCode(self,name,k,v){
     self.$set(name,k,v)
     }
    }

    父組件中的邏輯部分

    <script>
     export default {
     data() {
     return {
     // 顯示子組件修改密碼的對象變量
     dialog: {
     visible: false, //是否顯示 
     ruleForms: 'ruleForms', //點(diǎn)擊按鈕后,需要操作的refs(也就是dom元素)
     ruleForm: { //所需要進(jìn)行在表單中操作的部分
     phone: '',
     newPwd: '',
     code: '',
     sendCode: '發(fā)送驗證碼',
     disabled: false,
     isChick:false,
     loading: false,
     loadingText: '確 定'
     },
     
     }, 
     //倒計時60秒
     timeCount:60
     }
     
     },
     methods:{
     //重點(diǎn)部分
     sendCode60s(self,opt){
     let count=self.timeCount;
     const ruleForm = self[opt.dialog][opt.ruleForm]
     self.timer = setInterval(()=>{
     //這個按鈕是
     self.$globals.isChick(ruleForm,'disabled',count)
     let code = count<10?`0${count}s后重新發(fā)送`: `${count}s后重新發(fā)送`
     self.$globals.sendCode(self,ruleForm,opt.sendCode,code)
     self.$globals.isChick(ruleForm,'isChick',count)
     if(count<=0){
     ruleForm.disabled = false
     self.$globals.isChick(ruleForm,'disabled')
     code = '發(fā)送驗證碼'
     clearInterval(self.timer)
     count =self.timeCount
     self.$globals.sendCode(self,ruleForm,opt.sendCode,code)
     self.$globals.isChick(ruleForm,'isChick')
     }
     count --
     },1000)
    
     },
     //發(fā)送驗證碼sendCode
     sendCode(opt){
     const phone = opt.phone
     //判斷手機(jī)號碼第1位是否是數(shù)字1開頭
     if(phone.slice(0,1)!=='1'){
     this.$message({
     showClose: true,
     message: '請輸入正確的手機(jī)號碼',
     type: 'error'
     });
     return
     }
     this.$confirm(`向${phone}發(fā)送短信驗證碼?`, '提示', {
     confirmButtonText: '確定',
     cancelButtonText: '取消',
     type: 'warning'
     }).then(() => {
     this.$message({
     type: 'success',
     message: '發(fā)送短信驗證碼成功!'
     });
     const opt ={
     dialog: 'dialog',
     ruleForm: 'ruleForm',
     sendCode:'sendCode'
     }
     this.sendCode60s(this,opt)
     }).catch(() => {
     this.$message({
     type: 'info',
     message: '發(fā)送短信驗證碼失敗'
     });
     });
     },
     //新的密碼
     determine(formName){
     console.log(formName)
     // this.$refs[formName].validate((valid) => {
     // if (valid) {
     // this.dialog.ruleForm.loading = true
     // this.dialog.ruleForm.loadingText ='發(fā)送中...'
     // } else {
     // return false;
     // }
     // });
     },
     
     }
     }
    </script>

    總結(jié)

    以上所述是小編給大家介紹的vue2之簡易的pc端短信驗證碼的問題及處理方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
    如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    vue2之簡易的pc端短信驗證碼的問題及處理方法

    vue2之簡易的pc端短信驗證碼的問題及處理方法: <提示語部分不要在意(非重點(diǎn)部分)> 簡單說下布局(采用的是 vue的element ui的ui框架 )進(jìn)行布局操作的 子組件模板部分如下(code部分是很基礎(chǔ)的) <template> <div class=forget> <el-dialog tit
    推薦度:
    標(biāo)簽: 信息 VUE 驗證碼
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 久久青青草原精品国产| 日产精品久久久久久久性色| 亚洲午夜精品久久久久久浪潮| 国产91精品在线观看| 亚洲精品国自产拍在线观看| 中文字幕亚洲综合精品一区| 国内精品久久久久影院优| 免费精品精品国产欧美在线欧美高清免费一级在线 | 国产精品无码日韩欧| 日韩精品一区二区午夜成人版| 国产成人1024精品免费| 99久久国产综合精品麻豆| 久久国产精品99国产精| 亚洲爆乳精品无码一区二区三区| 污污网站国产精品白丝袜| 久久精品夜色噜噜亚洲A∨| 国产精品一区二区三区99| 国产精品久久久久久久| 国产精品99久久免费观看| 色妞ww精品视频7777| 亚洲人精品午夜射精日韩| 亚洲精品乱码久久久久久蜜桃| 精品无人区无码乱码毛片国产| 国产精品自产拍在线观看花钱看 | 日韩精品少妇无码受不了| 欧美成人精品网站播放| 精品午夜国产人人福利| 国产精品一区三区| 国产精品熟女福利久久AV| 国产精品青青在线观看爽香蕉| 国产精品.XX视频.XXTV| 国产精品国产三级国产潘金莲| 99久久国产综合精品成人影院 | 亚洲处破女AV日韩精品| 亚洲性日韩精品一区二区三区 | 2021久久国自产拍精品| 国产精品国色综合久久| 色一乱一伦一图一区二区精品 | 在线成人精品国产区免费| 亚洲无码精品浪潮| 少妇精品久久久一区二区三区|