Vue中添加手机验证码组件功能操作方法


Posted in Javascript onDecember 07, 2017

什么是组件:

组件是Vue.js最强大的功能之一。组件可以扩展HTML元素,封装可重用的代码。在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能。在有些情况下,组件也可以是原生HTML元素的形式,以is特性扩展。

写在前面:

今天要实现的功能是在 完善个人信息页面(vue)中添加手机验证码组件,当用户点击 手机选项时,弹出获取验证码组件,完成验证手机的功能:

Vue中添加手机验证码组件功能操作方法

Vue中添加手机验证码组件功能操作方法

这里考虑到功能的复用,我把当前弹出手机验证码的操作放在了单独的组件中:

<template >
 <div>
  <div class="bind-phone-box">
   <div class="phone-title">绑定手机</div>
   <div class="phone-content" v-on:click.stop="fillContent">
    <input v-model="phoneNum" class="phone-num" type="text" placeholder="请输入手机号码">
    <div class="verify-box clearfix">
     <input class="verify-num" v-model="verifyNum" type="text" placeholder="请输入验证码"><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>

并把当前组件放在需要使用它的组件中,这里需要注意的是,在控制 绑定手机组件的显示和隐藏的时候,出现了一个小问题:点击 “手机” 按钮需要显示当前组件,但什么时候去隐藏当前的组件呢,我是这样想的:

情况1:用户已经输完了手机号并通过了验证,点击"确定"按钮的时候需要隐藏当前组件;

情况2:用户没有完成手机验证,但又不想继续,点击当前手机的任意位置(除去“确定”按钮、手机号输入框和 验证码输入框)都应该隐藏当前组件;

基于这两种情况,我在父组件中给子组件添加了一个容器:

<li class="mui-table-view-cell phone-li">
 <span v-on:click="verifyPhone" class="mui-navigate-right"><span>手机号<span class="necessary">*</span></span></span>
 
 <!-- 手机验证码 -->
  <div class="shade" v-show="verifyShow" v-on:click="verifyPhone">
    <!-- 手机验证码子组件 -->
    <phoneVerify></phoneVerify>
   </div>
  </li>

通过控制 父div 的显示状态来控制子组件的显示状态,

methods:{
  // 手机号验证
  verifyPhone(){
   this.verifyShow=!this.verifyShow;
  },
 },

在验证组件中的逻辑控制如下:

<script>
 // 引入弹窗组件
 import { Toast } from 'mint-ui';
 export default {
  data(){
   return {
    phoneNum:"", //手机号
    verifyNum:"", //验证码
    btnContent:"获取验证码", //获取验证码按钮内文字
    time:0, //发送验证码间隔时间
    disabled:false //按钮状态
   }
  },
  created(){
  },
  methods:{
   // 获取验证码
   sendSmsCode(){
    var reg=11&& /^((13|14|15|17|18)[0-9]{1}\d{8})$/;//手机号正则验证
    var phoneNum = this.phoneNum;
    if(!phoneNum){//未输入手机号
     Toast("请输入手机号码");
     return;
    }
    if(!reg.test(phoneNum)){//手机号不合法
     Toast("您输入的手机号码不合法,请重新输入");
    }
    this.time = 60;
    this.timer();
    // 获取验证码请求
    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 = "获取验证码";
     clearTimeout(timer);
     this.disabled = false;
    }
   },
   // 验证验证码
   verificationCode(){
    var phoneNum = this.phoneNum;//手机号
    var verifyNum = this.verifyNum;//验证码
    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>

其中,获取验证码和验证短信验证码的逻辑还没有写入。

PS:下面给大家补充一段vue短信验证码组件实例代码:

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 后重获取' : '获取验证码';
    }
  }
});
<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); //设置按钮不可用
      hz.ajaxRequest("sys/sendCode?_"+$.now(),function(data){
        if(data.status){
          vm.$refs.timerbtn.start(); //启动倒计时
        }else{
          vm.$refs.timerbtn.stop(); //停止倒计时
        }
      });
    },
  }
});

总结

以上所述是小编给大家介绍的Vue中添加手机验证码组件功能操作方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript动画效果类封装代码
Aug 28 Javascript
Javascript hasOwnProperty 方法 &amp; in 关键字
Nov 26 Javascript
jQuery写的日历(包括日历的样式及功能)
Apr 23 Javascript
深入探究AngularJS框架中Scope对象的超级教程
Jan 04 Javascript
基于JS代码实现图片在页面中旋转效果
Jun 16 Javascript
详解webpack 多页面/入口支持&amp;公共组件单独打包
Jun 29 Javascript
浅谈es6中export和export default的作用及区别
Feb 07 Javascript
基于Vue渲染与插件的加载顺序的问题详解
Mar 05 Javascript
Koa 使用小技巧(小结)
Oct 22 Javascript
JavaScript 实现下雪特效的示例代码
Sep 09 Javascript
关于Vue中$refs的探索浅析
Nov 05 Javascript
vue实现广告栏上下滚动效果
Nov 26 Vue.js
react学习笔记之state以及setState的使用
Dec 07 #Javascript
React Native 截屏组件的示例代码
Dec 06 #Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
Dec 06 #jQuery
mui back 返回刷新页面的实例
Dec 06 #Javascript
javascript实现Emrips反质数枚举的示例代码
Dec 06 #Javascript
基于jQuery Ajax实现下拉框无刷新联动
Dec 06 #jQuery
JS实现登录页密码的显示和隐藏功能
Dec 06 #Javascript
You might like
PHP Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
php读取富文本的时p标签会出现红线是怎么回事
2014/05/13 PHP
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
PHP实现git部署的方法教程
2017/12/19 PHP
用 JavaScript 迁移目录
2006/12/18 Javascript
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
2007/05/03 Javascript
Javascript attachEvent传递参数的办法
2009/12/14 Javascript
JS自调用匿名函数具体实现
2014/02/11 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
分析了一下JQuery中的extend方法实现原理
2015/02/27 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
2015/03/31 Javascript
基于jQuery实现动态搜索显示功能
2016/05/05 Javascript
js实现简单的手风琴效果
2017/02/27 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
2017/06/05 Javascript
javaScript 连接打印机,打印小票的实例
2017/12/29 Javascript
详解利用nodejs对本地json文件进行增删改查
2019/09/20 NodeJs
IDEA安装vue插件图文详解
2019/09/26 Javascript
Vue Element校验validate的实例
2020/09/21 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
Python生成随机数组的方法小结
2017/04/15 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
2017/06/23 Python
Python 获得命令行参数的方法(推荐)
2018/01/24 Python
Python 中字符串拼接的多种方法
2018/07/30 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
python源文件的字符编码知识点详解
2021/03/04 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
介绍一下SQL Server的全文索引
2013/08/15 面试题
党员的自我评价范文
2014/01/02 职场文书
物业招聘计划书
2014/01/10 职场文书
前厅收银主管岗位职责
2014/02/04 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书
负责培养人意见
2015/06/05 职场文书
2016年世界艾滋病日宣传活动总结
2016/04/01 职场文书
MySQL的全局锁和表级锁的具体使用
2021/08/23 MySQL