Vue.js专区Vue.jsVue精彩案例、教程

Vue获取验证码倒计时封装

2018-05-15  本文已影响66人  w3stone

定义公共/全局函数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中的逻辑不易理解。如有更好方法请指出!!!

上一篇 下一篇

猜你喜欢

热点阅读