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的设计模式
Nov 22 Javascript
基于jQuery的日期选择控件
Oct 27 Javascript
JS 按钮点击触发(兼容IE、火狐)
Aug 07 Javascript
JavaScript中提前声明变量或函数例子
Nov 12 Javascript
javascript构造函数以及原型对象的理解
Jan 13 Javascript
jquery编写日期选择器
Mar 16 Javascript
js获取指定时间的前几秒
Apr 05 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
Oct 28 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
Sep 18 Javascript
Vue+Node实现的商城用户管理功能示例
Dec 23 Javascript
vue 解决uglifyjs-webpack-plugin打包出现报错的问题
Aug 04 Javascript
Node.js web 应用如何封装到Docker容器中
Sep 01 Javascript
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
MySQL的FIND_IN_SET函数使用方法分享
2012/03/27 PHP
探讨php中遍历二维数组的几种方法详解
2013/06/08 PHP
PHP中nowdoc和heredoc使用需要注意的一点
2014/03/21 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
php的4种常见运行方式
2015/03/20 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
2020/05/01 PHP
Jquery Ajax.ashx 高效分页实现代码
2009/10/20 Javascript
深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
2015/03/05 Javascript
分析js闭包引起的事件注册问题
2016/03/29 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
Actionscript与javascript交互实例程序(修改)
2016/09/22 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
Vue实现双向绑定的方法
2016/12/22 Javascript
Javascript中return的使用与闭包详解
2017/01/11 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
layui的表单提交以及验证和修改弹框的实例
2019/09/09 Javascript
Vue开发中常见的套路和技巧总结
2020/11/24 Vue.js
python从ftp下载数据保存实例
2013/11/20 Python
python进阶教程之循环对象
2014/08/30 Python
zookeeper python接口实例详解
2018/01/18 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
2019/04/04 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
2019/06/13 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
使用python爬取抖音视频列表信息
2019/07/15 Python
pygame实现弹球游戏
2020/04/14 Python
Python中有几个关键字
2020/06/04 Python
python如何控制进程或者线程的个数
2020/10/16 Python
英国最大的正宗复古足球衫制造商和零售商:TOFFS
2018/06/21 全球购物
产品质量保证书
2014/04/29 职场文书
敬老院志愿者活动总结
2015/05/06 职场文书
《比尾巴》教学反思
2016/02/24 职场文书
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫
Python进程间的通信之语法学习
2022/04/11 Python