【VUE项目实战】11、绘制登录组件-数据验证篇

接上篇《 10、绘制登录组件-表单篇》
上一篇我们绘制了登录组件的表单部分,包括账号密码的填写框,以及登录和重置的按钮,并通过数据绑定获取到账号密码数据。
本篇我们讲解如何实现账号密码的数据验证、表单的重置以及登录前的预验证。

一、表单的数据验证

当我们填写完表单的账号密码后,当鼠标离开控件后,要立即对表单中填写数据的合法性进行校验。

进行表单验证的目的是在防止用户犯错的前提下,尽可能让用户更早的发现并纠正错误。效果如下:

我们要为el-form表单组件,添加一个“:rules”属性,该属性绑定一个表单的验证规则对象,这个对象也在data数据中定义,里面可以设置很多校验规则。然后每一个需要进行校验的子项,使用例prop属性表单的验证规则对象中的某个规则名,就可以执行相应的校验,绑定如:

<el-form :model="ruleForm" :rules="rules">
<el-form-item label="活动名称" prop="name">
    <el-input v-model="ruleForm.name"></el-input>
  </el-form-item>
</el-form>
<script>
export default {
    data() {
      return {
        ruleForm: { name: '' },
        rules: {
          name: [
            { required: true, message: '请输入活动名称', trigger: 'blur' },
            { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
          ]
        }
      };
    }
}
</script>

这里就给ruleForm表单绑定了一个名为“rules”的验证规则对象,在里面定义一个名为“name”的规则,如是否必填,错误提示信息、触发机制(blur是鼠标失去焦点后)、最小字符、最大字符等,然后在name的input控件上,使用prop属性绑定了“name”这个规则。现在我们就来按照这个逻辑,给登录界面的账号密码添加校验规则:

<template>
  <div class="login_container">
    <div class="login_box">
        <!-- 头像区域 -->
        <div class="avatar_box">
            <img src="../assets/logo.png" alt=""/>
        </div>
        <!-- 表单区域 -->
        <el-form :model="loginFrom" :rules="loginFormRules" label-width="0px" class="login_form">
          <el-form-item prop="username"><!-- 用户名 -->
            <el-input v-model="loginFrom.username" prefix-icon="el-icon-user-solid"></el-input>
          </el-form-item>
          <el-form-item prop="password"><!-- 密码 -->
            <el-input v-model="loginFrom.password" prefix-icon="el-icon-lock" type="password"></el-input>
          </el-form-item>
          <el-form-item class="btns"><!-- 按钮区域 -->
            <el-button type="primary">登录</el-button>
            <el-button type="info">重置</el-button>
          </el-form-item>
        </el-form>
    </div>
  </div>
</template>

<script>
export default {
  data(){
    return{
      //这里是登录表单的数据绑定对象
      loginFrom: {
        username: 'admin',
        password: '123'
      },
      //表单验证规则对象
      loginFormRules:{
        //验证用户名是否合法
        username:[
          { required: true, message: '请输入登录名', trigger: 'blur' },
          { min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' }
        ],
        //验证密码是否合法
        password:[
           { required: true, message: '请输入登密码', trigger: 'blur' },
           { min: 6, max: 15, message: '长度在 6 到 15 个字符', trigger: 'blur' }
        ]
      }
    };
  }
};
</script>

<!-- 支持less语法格式,scoped代表样式只在本组件起作用 -->
<style lang="less" scoped>
  .login_container{
      background-color: #2b4b6b;
      height: 100%;
  }
  .login_box{
      width: 450px;
      height: 300px;
      background-color: #fff;
      border-radius: 3px;//圆角效果
      position: absolute;
      left: 50%;
      top: 50%;
      transform: translate(-50%,-50%);
      //less语法的嵌套
      .avatar_box{
          height: 130px;
          width: 130px;
          background-color: #fff;
          border: 1px solid #eee;//加个灰色边框
          border-radius: 50%;//div组件变成圆形
          padding: 10px;//图片和边框之间有10px间隙
          box-shadow: 0 0 10px #ddd;//添加一个阴影,向外扩散10像素
          //头像居中,向左移动box的50%,再向右移动自身的-50%,向上移动该组件高度的-50%,
          position: absolute;
          left: 50%;
          transform: translate(-50%,-50%);
          img{
            height: 100%;
            width: 100%;
            border-radius: 50%;//图片变成圆形
            background-color: #eee;
          }
      }
  }

  .login_form {
    position: absolute;
    bottom: 0px;//靠下
    width: 100%;
    padding: 0 20px;//上下内边距0,左右内边距20px
    //border-box为元素指定的任何内边距和边框都将在已设定的宽度和高度内进行绘制。
    //实际宽度会是width减去border + padding的计算值
    //此处是为了不让input超出我们的登录父div
    box-sizing: border-box;
  }

  .btns {
    display: flex;//flex布局
    //justify-content控制项目在横轴的对齐方式
    //flex-start即左对齐,center 为居中,对应的flex-end为右对齐。
    justify-content: flex-end;
  }
  
</style>

这里我们在el-form中定义了一个名为“loginFormRules”的验证规则对象,然后带data区域给该对象添加了两个验证字段,并通过prop属性分别绑定在用户名和密码的el-form-item标签上。
实现效果:

二、表单的重置

在登录注册界面有一个重置按钮,我们要实现当点击重置按钮后,表单的数据全部被清空。

我们看一下element-ui的官方文档,可以看到el-form表单提供的方法:

这里的“resetFields”方法,就是重置整个表单到初始状态。我们可以拿到整个表单对象,然后执行表单对象的“resetFields”方法即可。

如何拿到表单对象呢?很简单,我们给el-form表单增加一个“ref”属性,让它等于一个引用的名称,我们获取到这个引用,就相当于获取到了整个表单。下面我们来实现它。

首先在登录的el-form标签上添加ref属性,定义一个名为“loginFormRef”的表单对象:

<el-form :model="loginFrom" ref="loginFormRef" :rules="loginFormRules" label-width="0px" class="login_form">
   <!-- 中间代码省略... -->
</el-form>
然后在之前的重置按钮上绑定一个click时间,指定一个名为“resetLoginForm”的触发方法:
<el-button type="info" @click="resetLoginForm">重置</el-button>
然后在行为区域定义该方法:
<script>
export default {
  data(){
    //该处代码省略...
  },
  methods:{
    //点击重置按钮,重置登录表单
    resetLoginForm(){
      console.log(this);
    }
  }
};
</script>

我们先把整个VUE组件打印出来,看看里面都有什么(F12打开开发人员工具):

我们可以看到,在this里,有一个“$refs”属性,里面包含了我们定义的表单对象名“loginFormRef”,所以我们通过“this.$refs.loginFormRef”就能拿到表单对象。
所以我们修改方法,获取到表单对象并调用其“resetFields”方法:

resetLoginForm(){
  //console.log(this);
  this.$refs.loginFormRef.resetFields();
}

效果:

因为我们绑定了初始值“admin”和密码“123”,所以重置之后不会清空,会恢复初始值。

三、登录前的预验证

当我们填写完账号密码后,点击“登录”按钮,不应该直接发起登录请求,而是需要在提交之前对我们的表单数据进行预验证,通过后才能发起,否则提示不合法。

那么该如何验证呢?是在登录后,调用表单的某个函数来实现。回顾一下上面el-form提供的表单方法,其中有一个“validate”,是对整个表单进行校验的方法:

该方法接收一个callback回调函数,函数的第一个形参是boolean值,标识校验的结果,如果通过boolean值为true,不通过为false。
调用该函数和之前一样,通过ref获取到表单对象后,直接调用该函数。

首先给登录按钮绑定一个方法“login”:

<el-form-item class="btns"><!-- 按钮区域 -->
    <el-button type="primary" @click="login">登录</el-button>
    <el-button type="info" @click="resetLoginForm">重置</el-button>
</el-form-item>

然后在方法区定义该方法:

login(){
  this.$refs.loginFormRef.validate((valid)=>{
    console.log(valid);
  });
}

这里我们先打印第一个形参,看看如果不合法的时候,形参值是多少:

可以看到,当校验不通过的时候,形参valid是false,相反是ture。我们可以根据这个参数来决定是否发起登录请求。

至此,发起请求之前的开发全部完成。
下一篇我们来讲解如何进行登录的网络请求并配置弹框提示。

参考:黑马程序员(www.itheima.com)Vue项目实战教学视频

转载请注明出处: https://blog.csdn.net/acmman/article/details/119701855

추천

출처blog.csdn.net/u013517797/article/details/119839071
【VUE项目实战】11、绘制登录组件-数据验证篇
【VUE项目实战】11、绘制登录组件-数据验证篇
【VUE项目实战】11、绘制登录组件-数据验证篇
【VUE项目实战】10、绘制登录组件-表单篇
【VUE项目实战】10、绘制登录组件-表单篇
【VUE项目实战】10、绘制登录组件-表单篇
【VUE项目实战】9、创建登录组件并绘制布局
【VUE项目实战】9、创建登录组件并绘制布局
Vue项目实战总结(八 组件传值)
【VUE项目实战】13、登录与退出功能-保存token和页面权限控制
【VUE项目实战】8、登录与退出功能开发准备(二)
【VUE项目实战】7、登录与退出功能开发准备(一)
【开源篇】组件化+Jetpack+MVVM项目实战,涉及协程+Retrofit,Paging3+Room等
element Switch组件使用方式项目实战
【FPGA实战篇六】四位数据选择器与D触发器、移位寄存器原理详解及功能验证
项目实战--用户消费数据分析
vue elementui表单验证组件动态修改required状态
2021-11-11 项目自定义组件通信
Vue项目实战总结(七 页面刷新)
Vue项目实战总结(五 插槽)
Vue项目实战总结(二 路由)
vue+OpenLayers 项目实践(六):历史轨迹绘制
【VUE项目实战】6、后台项目的安装配置
Flutter 项目实战 网络请求MD5+时间戳+验证签名 十一
vue组件中的数据传递
ThreeJs入门29-WebGl性能篇:高效地绘制50万个点数据
关于Vue项目的数据存储
从无到有构建vue实战项目(七)
Vue电商后台管理系统项目开发实战(一)
vite2.0+vue3移动端项目实战详解
추천
Game Engine Overview-Part1
열째 JAVA 작업 [1] (비 수업 내용)
자바으로 반복 이상이 개지도
분산 파일 시스템에 대한 연구 - 기술 시나리오
해외 거주자 2.2.8 릴리스, XML 파서
iOS 16이 다시 충돌합니다.
PIE-SDK를 들어 C ++ 공개 Micaps 데이터
봄 연결 풀 관리 실험 오차 (C3P0)
Python3 연구 노트 _C (모듈 파일)
[붓질문일기] 11. 물을 가장 많이 담는 용기
아카이브
기타
2020-04-08(1460)
2020-04-07(1517)
2020-04-06(1499)
2020-04-05(1440)
2020-04-04(1629)
2020-04-03(1644)
2020-04-02(1572)
2020-04-01(1665)
2020-03-31(1639)
2020-03-30(1334)

哆哆女性网牛场起名名字大全辐射4修改器远方作文适合用来起名字什么诗词护眼色ie修复金氏男孩起名大全2018年马姓宝宝起名阿爸在家中等着我万堂书院时代峰峻旗下艺人名单生辰八字起名缺土取名公司起名有火和土的电起子十大排名党员批评与自我批评2021rpg地图商标起名打分免费测试用诗起人名火影忍者纲手全部番子奇妙的旅程痞幼视频3分25是什么你是我的荣耀电视剧在线观看趣味设计杰拉尔我是小鱼儿看字典起名神之墓地2.6带水字的公司起名字张檬整容记图片判若两人夏洛特烦恼bt种子淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻不负春光新的一天从800个哈欠开始有个姐真把千机伞做出来了国产伟哥去年销售近13亿充个话费竟沦为间接洗钱工具重庆警方辟谣“男子杀人焚尸”男子给前妻转账 现任妻子起诉要回春分繁花正当时呼北高速交通事故已致14人死亡杨洋拄拐现身医院月嫂回应掌掴婴儿是在赶虫子男孩疑遭霸凌 家长讨说法被踢出群因自嘲式简历走红的教授更新简介网友建议重庆地铁不准乘客携带菜筐清明节放假3天调休1天郑州一火锅店爆改成麻辣烫店19岁小伙救下5人后溺亡 多方发声两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#青海通报栏杆断裂小学生跌落住进ICU代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了当地回应沈阳致3死车祸车主疑毒驾武汉大学樱花即将进入盛花期张立群任西安交通大学校长为江西彩礼“减负”的“试婚人”网友洛杉矶偶遇贾玲倪萍分享减重40斤方法男孩8年未见母亲被告知被遗忘小米汽车超级工厂正式揭幕周杰伦一审败诉网易特朗普谈“凯特王妃P图照”考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼恒大被罚41.75亿到底怎么缴男子持台球杆殴打2名女店员被抓校方回应护栏损坏小学生课间坠楼外国人感慨凌晨的中国很安全火箭最近9战8胜1负王树国3次鞠躬告别西交大师生房客欠租失踪 房东直发愁萧美琴窜访捷克 外交部回应山西省委原副书记商黎光被逮捕阿根廷将发行1万与2万面值的纸币英国王室又一合照被质疑P图男子被猫抓伤后确诊“猫抓病”

哆哆女性网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化