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 相关文章推荐
一个简单的js鼠标划过切换效果
Jun 30 Javascript
js给页面加style无效果的解决方法
Jan 20 Javascript
javascript实现切换td中的值
Dec 05 Javascript
javascript中var的重要性分析
Feb 11 Javascript
JavaScript中的条件判断语句使用详解
Jun 03 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
Dec 04 Javascript
JavaScript中获取纯正的undefined的方法
Mar 06 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
May 03 Javascript
canvas实现弧形可拖动进度条效果
May 11 Javascript
Vue利用canvas实现移动端手写板的方法
May 03 Javascript
layui实现鼠标移动到单元格上显示数据的方法
Sep 11 Javascript
详解react组件通讯方式(多种)
May 06 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
超强分页类2.0发布,支持自定义风格,默认4种显示模式
2007/01/02 PHP
在PHP中实现Javascript的escape()函数代码
2010/08/08 PHP
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
PHP经典算法集锦【经典收藏】
2016/09/14 PHP
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
js兼容标准的表格变色效果
2008/06/28 Javascript
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
2009/07/06 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
2010/12/14 Javascript
jquery通过closest选择器修改上级元素的方法
2015/03/17 Javascript
javascript中Math.random()使用详解
2015/04/15 Javascript
基于jquery实现轮播特效
2016/04/22 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
自带气泡提示的vue校验插件(vue-verify-pop)
2017/04/07 Javascript
在Vue中如何使用Cookie操作实例
2017/07/27 Javascript
vue-cli创建的项目,配置多页面的实现方法
2018/03/15 Javascript
vue登录页面cookie的使用及页面跳转代码
2019/07/10 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
Eclipse + Python 的安装与配置流程
2013/03/05 Python
python实现同时给多个变量赋值的方法
2015/04/30 Python
Python同时向控制台和文件输出日志logging的方法
2015/05/26 Python
Python提取Linux内核源代码的目录结构实现方法
2016/06/24 Python
详解python3中socket套接字的编码问题解决
2017/07/01 Python
python迭代器常见用法实例分析
2019/11/22 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
2020/02/10 Python
Python figure参数及subplot子图绘制代码
2020/04/18 Python
python中id函数运行方式
2020/07/03 Python
python基于opencv 实现图像时钟
2021/01/04 Python
现代化办公人员工作的自我评价
2013/10/16 职场文书
本科毕业自我鉴定
2014/03/20 职场文书
大专生求职信
2014/06/29 职场文书
委托证明范本
2014/11/25 职场文书
工地材料员岗位职责
2015/04/11 职场文书
2015年汽车销售经理工作总结
2015/04/27 职场文书
学历证明样本
2015/06/16 职场文书