使用vue3以及原生input实现一个可复用的组件(包括各种数组类型,手机号类型,小数类型)

看标题要实现可复用 那我就注册到全局组件里面 在component.ts

//注册全局公共组件
import MxInput from '@/components/common/MxInput.vue' 
const commonComponents = {install(Vue) {Vue.component('MxInput', MxInput)}
};
export default commonComponents;

子组件:

<template><div class="van_input_wrapper"><input :type="props.type" :value="props.modelValue" :disabled="props.disabled"  :maxlength="props.maxlength" :placeholder="props.placeholder"  @input="_onInput"  @blur="_onBlur" @click="_click"  :class="{ 'disabled-input': props.disabled, 'error-input': props.error }"   class="van_input" /><span  v-if="props.modelValue && !props.disabled" class="input_del" @click="clearInputValue"></span></div>
</template><script setup lang="ts">
import { reactive} from 'vue';
// var obj = {
// 1:'下拉列表', 2:'文本', 3:'多行文本', 4:'数字', 5:'小数', 6:'复选框',-->
//  7:"正则表达式", 8:"日期", 9:'短信', 10:'验证码', 11:'表单', 12:'附件',-->
//  13:'评星', 14:'高级复选框', 15:'商品表', 16:'满意度评价表', 17:'文本(电话类型)', 18:'级联',-->
// 19:'地理位置', 20:'资产表', 21:'表单关联', 24:'支付', 23:'签名', 25:'计算字段', 26:'日期时间'-->
// }
interface iObj {isDelButtonVisible:boolean[key: string]: any
}//props 定义类型
interface iProps {type?:string //input类型fieldType?:string //字段类型placeholder: stringmaxlength?: string //长度设置disabled?: boolean  //disablederror?:boolean  //错误样式modelValue?: string  //v-model[key: string]: any
}
//emit
interface iEmit {(e: 'click', value: string): void(e: 'input', value: string): void(e: 'change', value: string): void(e: 'update:modelValue', value: string): void   //更新v-model
}
//vue3中props edit注册
let emit = defineEmits<iEmit>();
let props = withDefaults(defineProps<iProps>(), {type:'text'
})const data:iObj = reactive({isDelButtonVisible:false
})
//input事件
function _onInput(event){const inputValue = event.target.value;const fieldType = props.fieldType;const inputElement = event.target;console.log(11212,event.target.value,props.fieldType)if(fieldType === '5'){// 限制小数点后两位const pattern = /^-?([1-9]\d*|0)(\.\d+)?$/;if (!pattern.test(inputValue)) {// 如果不符合格式,则调整输入值const parts = inputValue.split('.');if (parts.length > 1 && parts[1].length > 2) {// 如果小数点后超过两位,则截断event.target.value = `${parts[0]}.${parts[1].substring(0, 2)}`;}}}else if(fieldType === '4'){//只能输入数字inputElement.value = '';event.target.value = inputValue.replace(/[^\d]/g, '')}console.log(22212,event.target.value)emit('update:modelValue',event.target.value)emit('input',event)
}
//失去焦点
function _onBlur(event) {const inputValue = event.target.value;const fieldType = props.fieldType;if (fieldType === '5') {// 检查小数点后是否不足两位const parts = inputValue.split('.');console.log(parts,parts.length)if(inputValue){if (parts.length === 2 && parts[1].length === 1) {// 如果只有一位小数,则补全为两位event.target.value = `${inputValue}0`;} else if (parts.length === 1) {// 如果没有小数部分,则添加 .00event.target.value = `${inputValue}.00`;}}emit('update:modelValue', event.target.value);}else if (fieldType === '17') {// 手机号正则表达式const phonePattern = /^1[3-9]\d{9}$/;if (!phonePattern.test(inputValue)) {// 如果不是有效的手机号,可以显示错误提示或者进行其他处理console.error('请输入有效的手机号');// 这里可以添加更多的逻辑,比如显示错误消息或者修改样式等}else{emit('update:modelValue', inputValue);}}
}function _click(event){emit('click',event)
}
function clearInputValue() {emit('update:modelValue','')
}
</script><style scoped lang="less">
.van_input_wrapper{position: relative;
}
.van_input{width: calc(100% - 38px);height: 40px;border-radius: 5px;border: 1px solid #DDE0E8;color:rgba(0,0,0,0.9);font-weight: 400;font-size: 14px;line-height: 42px;padding:0 30px 0 8px;
}
.disabled-input{background: #F0F2F4;border-radius: 4px;border: 1px solid #DDE0E8;
}
.error-input{box-shadow: 0px 0px 4px 0px rgba(244,78,78,0.5);border-radius: 4px;border: 1px solid #F44E4E;
}
.input_del{display: block;position: absolute;right: 10px;top:14px;width: 14px;height: 14px;background: url("./src/assets/img/input_del.png") no-repeat center center;background-size: 14px 14px;
}
.van_input:focus{border: 1px solid #0162E2;box-shadow: 0 0 4px 0 rgba(1,98,226,0.5);
}
.van_input::-webkit-input-placeholder{color:rgba(0,0,0,0.35);font-weight: 400;font-size: 14px;
}
.van_input:-moz-placeholder, textarea:-moz-placeholder {color:rgba(0,0,0,0.35);font-weight: 400;font-size: 14px;
}
.van_input::-moz-placeholder, textarea::-moz-placeholder {color:rgba(0,0,0,0.35);font-weight: 400;font-size: 14px;
}
.van_input:-ms-input-placeholder, textarea:-ms-input-placeholder {color:rgba(0,0,0,0.35);font-weight: 400;font-size: 14px;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/835902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【实战】采用jenkins pipeline实现自动构建并部署至k8s

文章目录 前言部署jenkins编写docker-compose-jenkins.yaml配置maven源启动jenkins解锁jenkins Jenkins默认插件及git、镜像仓库、k8s凭证配置host key verification configuration修改为不验证Gitee ssh阿里云镜像仓库ssh编写pipeline安装以下常用插件将kubectl命令文件拷贝到…

E - Yet Another Sigma Problem(ABC字典树)

思路&#xff1a;我们可以发现两个字符串的最长公共前缀就是字典树中的最近公共祖先。然而这道题&#xff0c;比如说某个结点是x个字符串的前缀&#xff0c;那么当前结点对答案的贡献为x * (x - 1) / 2&#xff0c;就是x中任选两个字符串组合&#xff0c;因为在这之前&#xff…

【Win10设备管理器中无端口选项】

计算机疑难杂症分享002 Win10设备管理器中无端口选项1、问题现象2、问题原因3、问题解决3.1、驱动精灵(亲测的此方法)3.2、添加过时硬件3.3、官方的方法 Win10设备管理器中无端口选项 1、问题现象 当我调试串口通信时&#xff0c;发现打开设备管理器没有端口&#xff0c;打开…

Docker停止不了

报错信息 意思是&#xff0c;docker.socket可能也会把docker服务启动起来 解决 检查服务状态 systemctl status dockersystemctl is-enabled docker停止docker.socket systemctl stop docker.socket停止docker systemctl stop docker知识扩展 安装了docker后&#xff0c;…

[ue5]编译报错:使用未定义的 struct“FPointDamageEvent“

编译报错&#xff0c;错误很多&#xff0c;但很明显核心问题是第一个&#xff1a;使用未定义的 struct“FPointDamageEvent“&#xff1a; 程序没有找到FPointDamageEvent的定义。 解决办法&#xff1a; 处理这类未定义都可以先F12&#xff0c;找到它的库位置&#xff0c;之后…

部署yolov5

1 创建一个yolov5的环境 conda create -n yolov5 python3.8 2 激活环境 conda activate yolov5 3 设置清华源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 4 PyTorch 网站下载pytorch 备注:也可以使用pip install 5 下载 yolov5…

iOS collectionViewCell显示选中颜色

demo git地址&#xff1a;点这里 原理思想简介 reloadData只会刷新内存中保存的cell&#xff0c;注意cell会复用&#xff0c;所以最多会刷新当前显示的加上一个用来复用的cell。实现的思想有两种&#xff1a; 设置一个全局的变量保存选中的位置&#xff0c;然后刷新collectio…

数据可视化训练第四天(模拟投掷筛子并且统计频次)

投掷一个筛子 import matplotlib.pyplot as plt from random import randint import numpy as npclass Die:"""模拟投掷筛子"""def __init__(self,num_sides6):self.num_sidesnum_sidesdef roll(self):return randint(1,self.num_sides)num1000…

知识付费系统的骗局,网上补课平台怎么收费?标准是什么?

随着教育的不断改革和更新&#xff0c;一种全新的授课方式出现在大众眼前&#xff0c;利用网课服务平台进行在线授课教学&#xff0c;不管是小学生、中学生还是大学生都可以进行网上学习。那么网上补课平台怎么收费?标准是什么? 网上补课平台收费标准一般来说在线一对一家教可…

【初中数学竞赛】x^x=(4/9)^(4/9),x≠4/9,求x?

题 初中数学 初中数学竞赛模拟练习 已知 x x ( 4 9 ) 4 9 x^x(\frac{4}{9})^\frac{4}{9} xx(94​)94​&#xff0c; x ≠ 4 9 x\neq\frac{4}{9} x94​&#xff0c;求值 x _ _ _ _ _ x\_\_\_\_\_ x_____。 解 x x ( ( 2 3 ) 2 ) ( 4 9 ) ( 2 3 ) 2 4 9 ( 2 3 ) 8 9 ( 2…

泰迪智能科技大数据开发实训平台功能介绍

大数据开发实训平台是面向实训课和课后训练的编程实训平台&#xff0c;平台底层基于Docker技术&#xff0c;采用容器云部署方案&#xff0c;预装大数据相关课程教学所需的实训环境&#xff0c;拥有1主2从的Hadoop集群&#xff0c;还能够自主定制环境&#xff0c;并能够与实训管…

C++接口:构建模块化与可扩展的软件架构

目录标题 1. 接口的定义与作用2. 抽象类作为接口3. 接口的设计原则4. 示例&#xff1a;使用接口实现多态5. 拓展&#xff1a;接口和类的区别6. 结论 在C编程中&#xff0c;接口是一种重要的设计模式&#xff0c;它定义了一组方法&#xff0c;这些方法可以被不同的类实现。接口在…

高架学习笔记之主要敏捷方法概览

一、极限编程&#xff08;Extreme Programming&#xff0c;XP&#xff09; XP是一个轻量级、灵巧、严谨周密的开发方法&#xff0c;它的价值观是交流&#xff0c;朴素&#xff0c;反馈和勇气&#xff0c;可理解为加强交流&#xff0c;从简单做起&#xff0c;寻求反馈&#xff0…

深入理解 JavaScript 中的 Promise、async 和 await

序言 在 JavaScript 中&#xff0c;异步编程是一项关键技能。为了更有效地处理异步任务&#xff0c;JavaScript 在其生命周期中引入了一系列功能。其中&#xff0c;Promise、async 和 await 是现代 JavaScript 中最重要的异步编程工具之一。本文将深入探讨这些概念&#xff0c…

WebAssembly在现代前端中的应用与未来展望

WebAssembly&#xff08;简称WASM&#xff09;在现代前端开发中的应用日益广泛&#xff0c;其核心优势在于提供了一种高性能、跨平台的执行环境&#xff0c;使得非JavaScript语言编写的代码也能在Web浏览器中运行。以下是WebAssembly在现代前端应用的一些关键领域及其未来展望&…

Java | Leetcode Java题解之第83题删除排序链表中的重复元素

题目&#xff1a; 题解&#xff1a; class Solution {public ListNode deleteDuplicates(ListNode head) {if (head null) {return head;}ListNode cur head;while (cur.next ! null) {if (cur.val cur.next.val) {cur.next cur.next.next;} else {cur cur.next;}}return…

C++调用有依赖库的python函数(VS2017+WIN10+Anaconda虚拟环境)

情况1.在写的函数中依赖了能够pip的库&#xff0c;例如numpy库、torch库,见下面的函数&#xff1a; import numpy as np import torch def add1(a, b):# 确保a和b都是NumPy数组a_array np.array(a) if not isinstance(a, np.ndarray) else ab_array np.array(b) if not isins…

萤火虫优化算法(Firefly Algorithm)

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 算法背景 萤火虫优化算法&#xff0c;是由剑桥大学的Xin-She Yang在2009年提出的一种基于群体智能的优化算法。它的灵感来源于萤火虫在夜晚闪烁…

Blender细节补充

1.饼状菜单&#xff0c;用于快速切换/选择 例如&#xff1a; ~&#xff1a;切换视图 Z&#xff1a;切换着色方式 &#xff0c;&#xff1a;切换坐标系 .&#xff1a;切换基准点 Shift S&#xff1a;吸附 有两种使用方式&#xff1a; -点选 -滑选&#xff0c;按快捷键…

表的创建与操作表

1. 创建表 创建表有两种方式 : 一种是白手起家自己添&#xff0c;一种是富二代直接继承. 2. 创建方式1 (1). 必须具备条件 CREATE TABLE权限存储空间 (2). 语法格式 CREATE TABLE IF NOT EXISTS 表名(字段1, 数据类型 [约束条件] [默认值],字段2, 数据类型 [约束条件] [默…