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 打包的静态文件不能直接运行的原因及解决办法
Nov 19 Vue.js
解决vue下载后台传过来的乱码流的问题
Dec 05 Vue.js
Vue中inheritAttrs的使用实例详解
Dec 31 Vue.js
如何在VUE中使用vue-awesome-swiper
Jan 04 Vue.js
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 Vue.js
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 Vue.js
Vue实现导入Excel功能步骤详解
Jul 03 Vue.js
关于Vue中的options选项
Mar 22 Vue.js
分享一个vue实现的记事本功能案例
Apr 11 Vue.js
vue elementUI批量上传文件
Apr 26 Vue.js
vue css 相对路径导入问题级踩坑记录
Jun 05 Vue.js
Vue Mint UI mt-swipe的使用方式
Jun 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
博士208HAF收音机实习报告
2021/03/02 无线电
PHP 时间日期操作实战
2011/08/26 PHP
浅析PHP递归函数返回值使用方法
2013/02/18 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
2013/06/05 PHP
Yii实现自动加载类地图的方法
2015/04/01 PHP
网页的分页下标生成代码(PHP后端方法)
2016/02/03 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
php 猴子摘桃的算法
2017/06/20 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
jquery自定义下拉列表示例
2014/04/25 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
跟我学习javascript的arguments对象
2015/11/16 Javascript
JavaScript阻止回车提交表单的方法
2015/12/30 Javascript
微信小程序通过api接口将json数据展现到小程序示例
2017/01/20 Javascript
JS去除字符串中空格的方法
2017/02/14 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
2018/01/03 Javascript
vue2.0 父组件给子组件传递数据的方法
2018/01/15 Javascript
Vue实现简易计算器
2020/02/25 Javascript
用Python制作简单的朴素基数估计器的教程
2015/04/01 Python
Python读取网页内容的方法
2015/07/30 Python
如何在Python中编写并发程序
2016/02/27 Python
轻松掌握python设计模式之访问者模式
2016/11/18 Python
python数据类型_元组、字典常用操作方法(介绍)
2017/05/30 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
Django通过json格式收集主机信息
2020/05/29 Python
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
2014/05/07 HTML / CSS
迎新晚会邀请函
2014/02/01 职场文书
小学家长评语大全
2014/04/16 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
2015年幼儿园保育工作总结
2015/05/12 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
Spring Boot项目传参校验的最佳实践指南
2022/04/05 Java/Android
在 Python 中利用 Pool 进行多线程
2022/04/24 Python