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 相关文章推荐
vue3.0中setup使用(两种用法)
Dec 02 Vue.js
vue中利用three.js实现全景图的完整示例
Dec 07 Vue.js
Vue项目中使用mock.js的完整步骤
Jan 12 Vue.js
详解实现vue的数据响应式原理
Jan 20 Vue.js
Vue看了就会的8个小技巧
Jan 21 Vue.js
Vue仿Bibibili首页的问题
Jan 21 Vue.js
vue实现无缝轮播效果(跑马灯)
May 14 Vue.js
详解Vue的sync修饰符
May 15 Vue.js
Vue的列表之渲染,排序,过滤详解
Feb 24 Vue.js
vue3使用vuedraggable实现拖拽功能
Apr 06 Vue.js
vue2的 router在使用过程中遇到的一些问题
Apr 13 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
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
PHP多进程简单实例小结
2019/11/09 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
用javascript实现读取txt文档的脚本
2007/07/20 Javascript
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
深入理解Javascript动态方法调用与参数修改的问题
2013/12/10 Javascript
Jquery获取和修改img的src值的方法
2014/02/17 Javascript
node.js中的querystring.escape方法使用说明
2014/12/10 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
2016/01/08 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
2016/03/12 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
Angular实现的简单查询天气预报功能示例
2017/12/27 Javascript
vue实现模态框的通用写法推荐
2018/02/26 Javascript
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
Layui数据表格跳转到指定页的实现方法
2019/09/05 Javascript
javascript 高级语法之继承的基本使用方法示例
2019/11/11 Javascript
详解Python的Flask框架中生成SECRET_KEY密钥的方法
2016/06/07 Python
使用Python实现博客上进行自动翻页
2017/08/23 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
Python关于__name__属性的含义和作用详解
2020/02/19 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
2020/06/10 Python
详解使用CSS3的@media来编写响应式的页面
2017/11/01 HTML / CSS
特步官方商城:Xtep
2017/03/21 全球购物
商务日语专业毕业生求职信
2013/10/26 职场文书
数控技术应届生求职信
2013/11/13 职场文书
董事长秘书岗位职责
2013/11/29 职场文书
运动会的口号
2014/06/09 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
经营目标管理责任书
2014/07/25 职场文书
2014教师年度工作总结
2014/11/10 职场文书
导游词之西湖雷峰塔
2019/09/18 职场文书