<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答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端短信驗(yàn)證碼的問題及處理方法

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

        vue2之簡易的pc端短信驗(yàn)證碼的問題及處理方法

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

        // 驗(yàn)證手機(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}$/
        //驗(yàn)證密碼
        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)行驗(yà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)行驗(yàn)證手機(jī)驗(yàn)證碼
         const validateCode = (rule, value, callback) => {
         if (value === '') {
         return callback(new Error('請輸入驗(yàn)證碼'));
         } else {
         //真正環(huán)境請修改成自己的邏輯即可
         if (this.dialog.ruleForm.code !== '123456') {
         callback(new Error('驗(yàn)證碼失誤,請重新輸入'))
         // this.dialog.ruleForm.code = ''
         return
         }
         callback();
         }
         };
         // 使用正則進(jìn)行驗(yà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:{ //驗(yàn)證表單元素中的規(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)擊驗(yàn)證碼狀態(tài)為false時,則可以進(jìn)行倒計(jì)時操作 
         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ā)送驗(yàn)證碼
         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ā)送驗(yàn)證碼',
         disabled: false,
         isChick:false,
         loading: false,
         loadingText: '確 定'
         },
         
         }, 
         //倒計(jì)時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ā)送驗(yàn)證碼'
         clearInterval(self.timer)
         count =self.timeCount
         self.$globals.sendCode(self,ruleForm,opt.sendCode,code)
         self.$globals.isChick(ruleForm,'isChick')
         }
         count --
         },1000)
        
         },
         //發(fā)送驗(yàn)證碼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ā)送短信驗(yàn)證碼?`, '提示', {
         confirmButtonText: '確定',
         cancelButtonText: '取消',
         type: 'warning'
         }).then(() => {
         this.$message({
         type: 'success',
         message: '發(fā)送短信驗(yàn)證碼成功!'
         });
         const opt ={
         dialog: 'dialog',
         ruleForm: 'ruleForm',
         sendCode:'sendCode'
         }
         this.sendCode60s(this,opt)
         }).catch(() => {
         this.$message({
         type: 'info',
         message: '發(fā)送短信驗(yàn)證碼失敗'
         });
         });
         },
         //新的密碼
         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端短信驗(yàn)證碼的問題及處理方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(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端短信驗(yàn)證碼的問題及處理方法

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

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 最新亚洲精品国偷自产在线| 亚洲一卡二卡三卡| 国产精品免费久久久久久久久 | 69视频免费观看l| 亚洲精品你懂的在线观看| 国产精品午夜免费观看网站| 亚洲一区二区视频在线观看 | 亚洲综合激情视频| 中文字幕在线观看免费视频| 亚洲AV成人无码天堂| 午夜免费福利网站| 免费一级毛片在线播放视频免费观看永久| 国产美女精品久久久久久久免费| 国产天堂亚洲国产碰碰| 亚洲狠狠爱综合影院婷婷| 99re6在线视频精品免费| 亚洲福利视频导航| 久久不见久久见免费影院| 欧美日韩亚洲精品| 国产精品亚洲精品日韩已方| 3344在线看片免费| 亚洲伊人久久大香线蕉结合| 日韩a级毛片免费视频| 一级毛片免费观看不收费| 亚洲国产精品国自产电影| 国产精品69白浆在线观看免费| 亚洲av日韩综合一区二区三区| 亚洲精品成a人在线观看| 三年片在线观看免费观看大全一| 亚洲视频在线观看2018| 亚洲欧洲一区二区三区| 3344免费播放观看视频| 青青视频免费在线| 久久精品国产亚洲77777| 精品无码国产污污污免费| 中文永久免费观看网站| 亚洲中文字幕久久无码| 亚洲一区爱区精品无码| 91在线视频免费91| 两性色午夜视频免费网| 亚洲无码一区二区三区|