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中音频wavesurfer.js的使用方法
Feb 20 Vue.js
vue3.0实现点击切换验证码(组件)及校验
Nov 18 Vue.js
Vue+element-ui添加自定义右键菜单的方法示例
Dec 08 Vue.js
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
Dec 30 Vue.js
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 Vue.js
vscode自定义vue模板的实现
Jan 27 Vue.js
Vue项目打包部署到apache服务器的方法步骤
Feb 01 Vue.js
Vue图片裁剪组件实例代码
Jul 02 Vue.js
Vue3.0 手写放大镜效果
Jul 25 Vue.js
vue中控制mock在开发环境使用,在生产环境禁用方式
Apr 06 Vue.js
vue项目配置sass及引入外部scss文件
Apr 14 Vue.js
vue3 自定义图片放大器效果的示例代码
Jul 23 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
德生1994机评
2021/03/02 无线电
php设计模式之观察者模式的应用详解
2013/05/21 PHP
ThinkPHP3.1新特性之G方法的使用
2014/06/19 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
YII动态模型(动态表名)支持分析
2016/03/29 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
JQuery将文本转化成JSON对象需要注意的问题
2011/05/09 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
5种处理js跨域问题方法汇总
2014/12/04 Javascript
浅谈javascript回调函数
2014/12/07 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
js改变style样式和css样式的简单实例
2016/06/28 Javascript
树结构之JavaScript
2017/01/24 Javascript
详解Node中导入模块require和import的区别
2017/08/11 Javascript
小程序实现多选框功能
2018/10/30 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
Node.js EventEmmitter事件监听器用法实例分析
2019/01/07 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
浅谈js中的bind
2019/03/18 Javascript
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
Python中的闭包总结
2014/09/18 Python
python实现计算倒数的方法
2015/07/11 Python
深入浅析python中的多进程、多线程、协程
2016/06/22 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
python list数据等间隔抽取并新建list存储的例子
2019/11/27 Python
python开发入门——set的使用
2020/09/03 Python
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
深入浅析CSS3中的Flex布局整理
2020/04/27 HTML / CSS
蔻驰英国官网:COACH英国
2020/07/19 全球购物
销售主管岗位职责
2014/02/08 职场文书
市级三好学生评语
2014/12/29 职场文书
2016教师节问候语
2015/11/10 职场文书
vscode远程免密登入Linux服务器的配置方法
2022/06/28 Servers