IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue3+TS实现自定义input组件的验证功能 -> 正文阅读

[JavaScript知识库]Vue3+TS实现自定义input组件的验证功能

自定义组件input输入框的验证

前言

关于input的组件,其中有一个必不可少的属性就是输入验证,这篇文章教大家如何给自己定义的input组件添加验证,以邮箱输入框为例,大家学会了可以自行拓展

创建组件

  1. 新建一个组件,创建基本代码
    这里定义的emailReg是邮箱规范验证的正则表达式
<template>
  <h1>
  </h1>
</template>
<script lang="ts">
import { defineComponent, reactive, PropType } from 'vue'
const emailReg = /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/
export default defineComponent
	setup() {
	
	}
</script>
  1. 定义interface,这里type我就写required和email两种,后续属性可以自己扩展。message为string类型。定义RulesProp并将它导出
interface RuleProp {
  type: 'required' | 'email'
  message: string
}
export type RulesProp = RuleProp[]
  1. 然后开始定义props:第一个属性rules,array类型,这里使用as进行类型断言为上面的RulesProp类型
props: {
    rules: Array as PropType<RulesProp>
  },
  1. 下面就在setup中创建响应式对象和回调:
setup(props, context) {
    const inputRef = reactive({
      val: '',
      error: false,
      message: ''
    })
    const validateInput = () => {
      
          }
          return passed
        })
        inputRef.error = !allPassed
      }
    }
  1. 写 validateInput 这个函数,就是表单验证的流程:
  • 先判断props.rules是否存在,因为rules是一个数组,所以我们这里使用数组上的every方法来进行验证流程(该方法会返回一个布尔值,只有每一项都是true的时候才会通过,只要有一个false就返回false。)
  • 在every创建一个临时变量passed = true,也就是每一个rule的临时变量
  • 规则在以后可能会有多种为方便扩展,所以这里采用switch case的结构
  • 第一个case是required,输入框的值不为空则可以通过
  • 第二个case是email,判断它是否符合我们上面写的邮箱判断正则
const validateInput = () => {
      if (props.rules) { // 判断props.rules是否存在
        const allPassed = props.rules.every(rule => { // 使用every方法
          let passed = true // 创建临时变量
          inputRef.message = rule.message
          switch (rule.type) {
            case 'required':
              passed = (inputRef.val.trim() !== '')// trim是去掉左右空格
              break
            case 'email':
              passed = emailReg.test(inputRef.val)
              break
            default:
              break
          }
          return passed
        })
        inputRef.error = !allPassed  // 用来显示错误信息
      }
    }

App.vue

  1. 先导入刚刚写的组件并在components中注册
import ValidateInput, { RulesProp } from './components/VaildateInput.vue'
  1. 在setup中创建一个emailRules,里面两条属性,第一个required是不能为空的,email是必须为邮箱格式。最后然后return导出
const emailRules: RulesProp = [
      { type: 'required', message: '电子邮箱地址不能为空' },
      { type: 'email', message: '请输入正确的电子邮箱格式' }
    ]
  1. 然后就页面渲染,大家可以随意,我这里采用的是bootstrap的样式,附上代码:
    下面class="form-text"的div是用来展示错误信息的,v-if绑定emailRef.error,判断不通过就会显示错误的信息emailRef.message
<div class="mb-3">
      <label for="for-label">邮箱地址</label>
      <validate-input :rules="emailRules"></validate-input>
</div>
<div class="form-group">
	  <label for="exampleInputEmail1">邮箱地址</label>
	  <input
	  type="email" class="form-control"
	  id="exampleInputEmail1" placeholder="Email"
	  v-model="emailRef.val"
	  @blur="validateEmail"
	  >
  	 <div class="form-text" v-if="emailRef.error">{{emailRef.message}}</div>
</div>

效果展示

不输入信息时:
在这里插入图片描述
输入信息不符合邮箱规范时:
在这里插入图片描述

关于input的校验规则还可以有很多能拓展的地方,大家可以自己去完善

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-26 08:46:34  更:2021-11-26 08:47:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 2:02:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码