首页 > 其他分享 >Vant组件库,表单校验时使用Toast组件弹出消息

Vant组件库,表单校验时使用Toast组件弹出消息

时间:2023-08-01 16:03:59浏览次数:40  
标签:Toast toast resolve return Vant 校验 组件 van loginForm


 在使用Vat组件的表单时,校验规则会出现在表单的下面,造成样式紊乱而且不美观。通过Taost组件实现校验信息的轻提示,简约美观方便的使用函数校验和正则校验来实现多功能校验。

                    Toast组件原来样式:                                               改造后样式:Vant组件库,表单校验时使用Toast组件弹出消息_表单        Vant组件库,表单校验时使用Toast组件弹出消息_表单_02

1.  van-form标签绑定:提交拦截验证和ref实例;

<van-form
   @submit="onSubmit"
   validate-trigger="onSubmit"
   ref="loginForm"
   :show-error="false"
>

Vant组件库,表单校验时使用Toast组件弹出消息_表单_03

2.  van-field标签绑定字段名和自定义的校验规则;

<van-field
     v-model.trim="loginForm.mobile"
     name="mobile"
     label="手机号码:"
     placeholder="请输入您的手机号码"
     autocomplete="off"
     :rules="[{ validator: loginValidator }]"
/>

Vant组件库,表单校验时使用Toast组件弹出消息_正则表达式_04

3.  return里面定义校验字段和正则表达式:

return {
   loginForm: {
      mobile: "",
      password: "",
   },
   mobilePattern: /^1[3|4|5|7|8][0-9]{9}$/,
   passwordPattern: /^[0-9]{6,12}$/,
};

Vant组件库,表单校验时使用Toast组件弹出消息_表单_05

4.  methods方法里面写校验规则:(可以写多个校验规则也可以写到一个方法里面依次校验)

loginValidator(val) {
   return new Promise((resolve, reject) => {
      if (this.loginForm.mobile === "") {
        this.$toast("手机号不能为空");
        return resolve(false);
      } else if (!this.mobilePattern.test(this.loginForm.mobile)) {
        this.$toast("不是有效的手机号码");
        return resolve(false);
      } else if (this.loginForm.password === "") {
        this.$toast("密码不能为空");
        return resolve(false);
      } else if (!this.passwordPattern.test(this.loginForm.password)) {
        this.$toast("密码长度不能小于6位字符");
        return resolve(false);
      } else {
        return resolve(true);
      }
    });
},

Vant组件库,表单校验时使用Toast组件弹出消息_正则表达式_06

5. 页面完整代码:

<template>
  <div>
    <div class="page">
      <van-nav-bar
        title="用户登录"
        right-text="注册"
        @click-right="onClickRight"
      />
      <van-form
        @submit="onSubmit"
        validate-trigger="onSubmit"
        ref="loginForm"
        :show-error="false"
      >
        <van-field
          v-model.trim="loginForm.mobile"
          name="mobile"
          label="手机号码:"
          placeholder="请输入您的手机号码"
           autocomplete="off"
          :rules="[{ validator: loginValidator }]"
        />
        <van-field
          v-model.trim="loginForm.password"
          type="password"
          name="password"
          label="密码:"
           autocomplete="off"
          placeholder="请输入您的密码"
          :rules="[{ validator: loginValidator }]"
        />
        <div class="btn">
          <van-button round block type="info" native-type="submit">
            登录
          </van-button>
        </div>
      </van-form>
    </div>
  </div>
</template>

<script>
export default {
  name: "login",
  data() {
    return {
      loginForm: {
        mobile: "",
        password: "",
      },
      mobilePattern: /^1[3|4|5|7|8][0-9]{9}$/,
      passwordPattern: /^[0-9]{6,12}$/,
    };
  },
  methods: {
    // 页面左上角注册按钮
    onClickRight() {
      this.$router.push({ name: "register" });
    },
    // 表单验证
    loginValidator(val) {
      return new Promise((resolve, reject) => {
        if (this.loginForm.mobile === "") {
          this.$toast("手机号不能为空");
          return resolve(false);
        } else if (!this.mobilePattern.test(this.loginForm.mobile)) {
          this.$toast("不是有效的手机号码");
          return resolve(false);
        } else if (this.loginForm.password === "") {
          this.$toast("密码不能为空");
          return resolve(false);
        } else if (!this.passwordPattern.test(this.loginForm.password)) {
          this.$toast("密码长度不能小于6位字符");
          return resolve(false);
        } else {
          // 再调接口判断是否注册:您还没有注册,请先注册!
          return resolve(true);
        }
      });
    },
    // 提交登录
    onSubmit(values) {
      console.log("submit", values);
    },
  },
};
</script>
<style scoped>
::v-deep .van-toast {
  height: 30px;
  border-radius: 50%;
}
::v-deep .van-cell {
  height: 90px;
}
::v-deep .van-field__label {
  font-weight: bold;
  font-size: 30px;
  display: flex;
  justify-content: end;
  align-items: center;
}
::v-deep .van-nav-bar {
  background-color: #1989fa;
}
::v-deep .van-nav-bar__title {
  color: #fff;
}
::v-deep .van-nav-bar__text {
  color: #fff;
}
</style>

Vant组件库,表单校验时使用Toast组件弹出消息_表单_07



标签:Toast,toast,resolve,return,Vant,校验,组件,van,loginForm
From: https://blog.51cto.com/u_15961699/6923345

相关文章

  • 在线直播系统源码,vant 轮播图组件
    在线直播系统源码,vant轮播图组件 <template> <van-swipe:autoplay="3000"indicator-color="#1baeae">  <van-swipe-itemv-for="(item,index)inlist":key="index">   <img:src="item.carouselUrl"......
  • Tomcat9 无法启动组件[Connector[AJP/1.3-8009]]
    无法启动组件[Connector[AJP/1.3-8009]]在tomcat中开启ajp后,启动tomcat遇到错误无法启动组件[Connector[AJP/1.3-8009]]。错误原因缺少配置项secretRequired。tomcat9提供的默认的AJP配置如下:<Connectorprotocol="AJP/1.3"address="::1"port="800......
  • 前端Vue自定义精美商品分类组件category 可用于电商应用分类页面
    随着技术的不断发展,传统的开发方式使得系统的复杂度越来越高。在传统开发过程中,一个小小的改动或者一个小功能的增加可能会导致整体逻辑的修改,造成牵一发而动全身的情况。为了解决这个问题,我们采用了组件化的开发模式。通过组件化开发,可以有效地实现单独开发,单独维护,而且它们之间......
  • vue中使用provide和inject依赖注入组件之间进行父子组件传值(也适用于嵌套路由)
      父组件中:provide:function(){return{reload:this.reload//父组件中的方法}}子组件中:inject:['reload']使用:this.reload()//也可传入参数......
  • 组件化、跨平台…未来前端框架将如何演进?
    前端框架在过去几年间取得了显著的进步和演进。前端框架也将继续不断地演化,以满足日益复杂的业务需求和用户体验要求。从全球web发展角度看,框架竞争已经从第一阶段的前端框架之争(比如Vue、React、Angular等),过渡到第二阶段的框架之争(比如Next、Nuxt、Remix、小程序等)。组件化开发的......
  • 若误删了系统某组件或注册表引起系统不稳定或杂疑问题的解决方法之一
    若误删了系统某组件或注册表引起系统不稳定或杂疑问题的解决方法:方法1:恢复到先前的系统还原点打开"控制面板-选择大图标-恢复-系统还原-上个还原点",它可以还原系统文件和设置,从而解决我们所遇到的问题方法2:使用 sfc/scannow 命令检查和修复系统文件的完整性。以下是在Win......
  • 自定义Android组件之带图像的TextV…
    本文为新书《Android/OPhone开发完全讲义》的内容连载。《Android/OPhone开发完全讲义》一书将在近期出版,敬请关注。 Android系统支持的图像格式)的TextView组件。在编写代码之前,先看一下Android组件的配置代码。1.<TextViewandroid:id="@+id/textview1"android:layout_width......
  • Unity UGUI的Shadow(阴影)组件的介绍及使用
    UnityUGUI的Shadow(阴影)组件的介绍及使用1.什么是Shadow(阴影)组件?Shadow(阴影)组件是UnityUGUI中的一个特效组件,用于在UI元素上添加阴影效果。通过调整阴影的颜色、偏移、模糊等属性,可以使UI元素看起来更加立体和有层次感。2.Shadow(阴影)组件的工作原理Shadow(阴影)组件......
  • 大二暑期实习记录(一):处理组件绑定数据错误(数组解构,map()方法)
    好家伙,搬砖 今天在做组件迁移(从一个旧平台迁移到一个新平台)的时候,发现了一些小小的问题: 1.错误描述:在穿梭框组件中,使用"节点配置"方法添加数据的时候,左测数据选择框直接消失了这里我们猜测一下,大概是数据处理出了问题此处,我们使用"数据绑定"绑定数据方法: ......
  • UI/UE统一设计与前端组件库建设
    一、当前问题(主要在管理后台)1、输入框、下拉选择框figma样式不一致2、search组件、table组件、翻页导航样式与交互不一致3、UI/UE设计成本高4、前端开发成本高二、原因分析1、设计师需要拥有全局视角,各平台统一规划。通常来说当一个界面设计美观、交互体验感好、并......