vue实现登陆页面开发实践


Posted in Vue.js onMay 30, 2022

组件使用的是vant ui,具体用法可去官网看。

分几个部分考虑,

一、输入框input的校验:1、blur时没有值和格式不符合的逻辑校验
2、限制输入长度逻辑,比如手机号只能11位,验证码只能6位。
二、验证码按钮逻辑
1、不同状态下验证码颜色,文案,是否能点击,是否显示记数需要兼顾。
2、验证码能够正常点击是在手机号格式正确情况下,所以这里要有个监听手机号,一旦格式符合,验证码生效
3、关于计数器的逻辑。

以下会从上面的点开考虑:

一、input的校验没有可说的,记住俩点,一个控制输入长度,一个控制格式。

1、格式校验

handleblurtel(){
      let phoneCodeVerification = /^[1][3,4,5,7,8][0-9]{9}$/;
     if(this.form.tel===''){
       this.errorTxt="请输入手机号码" // 不同情况下错误提示
     }else if(!phoneCodeVerification.test(this.form.tel)){
       this.errorTxt="请输入正确的手机号码格式"
     }else{
       this.errorTxt='' //有效情况记得清空错误提示
       return true
     }
   },
 // 验证码必填和格式验证
   handleblurcode(){
     if(this.form.code===''){
       this.errorTxtcode="请输入验证码"
     }else if(this.form.code.length>0&&this.form.code.length<6){
       this.errorTxtcode="请输入正确的验证码格式"
     }else{
       this.errorTxt=''
       return true
     }
   }

2、长度控制

// 限制输入的字符串长度
    hanldeInputTel(){//手机号长度保证11位
      if(this.form.tel.length>11){
        this.form.tel=this.form.tel.slice(0,11)
      }
    },
    handleInputCode(){//验证码保证6位
      if(this.form.code.length>6){
        this.form.code=this.form.code.slice(0,6)
      }
    },

二、验证码逻辑:

贴下html代码:

<van-field
    v-model="form.code" 
    center
    clearable
    label="短信验证码"
    :error-message="errorTxtcode"
    placeholder="请输入短信验证码"
    @input="handleInputCode"
    @blur="handleblurcode"
    
  >
    <template #button>
      <button size="small" :disabled="btnStatus" :class="btnStyle" type="primary" @click="clickCode">
        <van-count-down :time="time" format="ss" v-if="countFlag===1" @finish="finishDown"></van-count-down>
        <span>{{countTxt}}</span>
      </button>
    </template>
  </van-field>

vue实现登陆页面开发实践

vant-count-down是vant组件自带的计数器用法,直接引入,time是初始化时间数,比如60s,1min,format是时间格式:时分秒,秒等。
@finish是自带的方法,具体api可去官方网站看,这里不做介绍。

1、初始化按钮状态:

data(){
    return {
      form:{
        tel:'',
        code:''
      },
      errorTxt:'',// 手机号错误提示
      errorTxtcode:'',// 验证码错误提示
      btnStatus:true,// 按钮不可点击
       btnStyle: 'nomalStyle',// 促初始化按钮样式
       time:60*1000,// 时间数
       countTxt:'发送验证码',// 初始化按钮文案
       countFlag:0//0:展示文案,1;展示计数,开始计时
    }
  
  },

1、开始计时:
按钮状态不可点击状态btnStatus,按钮样式:btnStyle,开始计数:countFlag

// 点击按钮开始计时
    clickCode(){
      this.btnStatus=true
      this.btnStyle=`countdown`
      this.countFlag=1//开始计时
      this.countTxt=''//文案为空
    },

2、倒计时结束后:需要修改这些参数
按钮可继续点击btnStatus,显示文案countFlag,c文案内容countTxt

//  倒计时结束
    finishDown(){
       this.btnStyle=`canClick`
       this.btnStatus=false
       this.countTxt='重新获取'
       this.countFlag=0
    },

3、按钮状态何时触发:
手机号符合格式情况下,watch里面监听手机号

watch:{
   form: {
      handler() {
        if(/^[1][3,4,5,7,8][0-9]{9}$/.test(this.form.tel)){
         this.btnStyle = 'canClick'
          this.btnStatus=false
        }else{
         this.btnStatus=true
        }
      },
      immediate: true,
      deep: true
    }
  },

vue实现登陆页面开发实践

vue实现登陆页面开发实践

vue实现登陆页面开发实践

4、最后点击提交的简单写法:

// 提交用户信息
    sumbit(){
      let telStatus=this.handleblurtel()
      let codeStatus=this.handleblurcode()
      if(telStatus&&codeStatus){
        this.axios.get({}).then(res=>{
          console.log('提交成功')
          // 把后端会的token存入前端缓存
          localStorage.setItem('token',res.data.toekn)
          // 跳转到首页
          this.$router.push({path:'/'})
        })
      }
    },

1,2,3步可以一步一步来,这样思路就会清晰,不然会觉得验证码一会儿这样显示一会儿那样显示,就会很混乱,所以先把单个功能开发完,最后写按钮变化前提条件 这样思路就很明确。

样式放在文末:

.nomalStyle {
    background: #EAEEFD;
    color: #5E6679;
  }
  button {
      width: 161px;
      height: 61px;
      border-radius: 31px;
      line-height: 61px;
      font-size: 24px;
      text-align: center;
    }
    .canClick {
    background-color: #3E64D4;
    color: #FFFFFF;
  }
   .countdown {
    background: #EAEEFD;
    color: #3E64D4
  }

到此这篇关于vue实现登陆页面开发实践的文章就介绍到这了!

Vue.js 相关文章推荐
Vue.extend 登录注册模态框的实现
Dec 29 Vue.js
vue实现一个获取按键展示快捷键效果的Input组件
Jan 13 Vue.js
vue 根据选择的月份动态展示日期对应的星期几
Feb 06 Vue.js
手动实现vue2.0的双向数据绑定原理详解
Feb 06 Vue.js
如何管理Vue中的缓存页面
Feb 06 Vue.js
vue实现锚点定位功能
Jun 29 Vue.js
vue实现拖拽交换位置
Apr 07 Vue.js
vue实现书本翻页动画效果实例详解
Apr 08 Vue.js
vue router 动态路由清除方式
May 25 Vue.js
Vue深入理解插槽slot的使用
Aug 05 Vue.js
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 Vue.js
vue router 动态路由清除方式
May 25 #Vue.js
vue如何清除浏览器历史栈
May 25 #Vue.js
vue3不同环境下实现配置代理
May 25 #Vue.js
vue使用element-ui按需引入
May 20 #Vue.js
vue/cli 配置动态代理无需重启服务的方法
May 20 #Vue.js
Vue ECharts实现机舱座位选择展示功能
May 15 #Vue.js
Vue组件化(ref,props, mixin,.插件)详解
You might like
php设计模式 State (状态模式)
2011/06/26 PHP
PHP中的插件机制原理和实例
2014/07/08 PHP
PHP自动重命名文件实现方法
2014/11/04 PHP
php正则替换处理HTML页面的方法
2015/06/17 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
javascript css float属性的特殊写法
2008/11/13 Javascript
测试你的JS的掌握程度的代码
2009/12/09 Javascript
Javascript Object.extend
2010/05/18 Javascript
深入理解JavaScript系列(11) 执行上下文(Execution Contexts)
2012/01/15 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
2013/10/17 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
angularJS 入门基础
2015/02/09 Javascript
JavaScript返回上一页的三种方法及区别介绍
2015/07/04 Javascript
javascript html实现网页版日历代码
2016/03/08 Javascript
js倒计时简单实现代码
2016/08/11 Javascript
JavaScript输出所选择起始与结束日期的方法
2017/07/12 Javascript
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
canvas+gif.js打造自己的数字雨头像的示例代码
2017/10/26 Javascript
js继承的这6种方式!(上)
2019/04/23 Javascript
Ajax请求时无法重定向的问题解决代码详解
2019/06/21 Javascript
Python中分支语句与循环语句实例详解
2018/09/13 Python
对Python 多线程统计所有csv文件的行数方法详解
2019/02/12 Python
Python 实现集合Set的示例
2020/12/21 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
耐克中国官方商城:Nike中国
2018/10/18 全球购物
教师自我反思材料
2014/02/14 职场文书
军训教官感言
2014/03/02 职场文书
社团活动总结格式
2014/08/29 职场文书
护士爱岗敬业心得体会
2016/01/25 职场文书
涨工资申请书应该怎么写?
2019/07/08 职场文书
浅谈Python数学建模之线性规划
2021/06/23 Python
python 管理系统实现mysql交互的示例代码
2021/12/06 Python
详解Python中的for循环
2022/04/30 Python