Vue获取验证码倒计时封装

作者: w3stone | 来源:发表于2018-05-15 15:13 被阅读66次

定义公共/全局函数timeCountdown

function timeCountdown(obj) { //obj包括timer、waitTime 、canGet 
    const TIME_COUNT = 60; //默认倒计时秒数

    if (!obj.timer) {
        obj.waitTime = TIME_COUNT;
        obj.canGet = false;
        obj.timer = setInterval(() => {
            if (obj.waitTime>0 && obj.waitTime<=TIME_COUNT) {
                obj.waitTime--;
            }else{
                obj.canGet = true;
                clearInterval(obj.timer); //清空定时器
                obj.timer = null;
            }
        }, 1000)
    }
    return {
        timer: obj.timer,
        canGet: obj.canGet,
        waitTime: obj.waitTime
    }
}

在vue中使用

1、template

<button class="getmodBtn" @click="getCode()" :disabled="!login.canGet">
   <span v-show="!login.canGet">{{login.waitTime+"s后重新获取"}}</span>
   <span v-show="login.canGet">获取手机验证码</span>
</button>

2、data

data (){
  return{            
    tempLogin:{ //定义一个临时对象
      canGet: true,
      timer: null,
      waitTime: 60
      },
    }
},

3、computed(重点)

login(){ //最终对象
  if(!this.tempLogin.canGet){
    return timeCountdown(this.tempLogin);
  }else{
    return this.tempLogin;
  }
}

4、methods

methods:{
    getCode(){
        //倒计时开始
        timeCountdown(this.login);  //参数为最终对象
    }
}

结论

如果项目中有在不用组件多个地方点击按钮倒计时功能,该封装可以减少methods中代码量和维护量。但该方法依然需要在data和computed中定义多个变量和方法,且computed中的逻辑不易理解。如有更好方法请指出!!!

相关文章

网友评论

本文标题:Vue获取验证码倒计时封装

本文链接:https://www.haomeiwen.com/subject/jhaedftx.html