仿element-ui 实现自己组件库 <3>

目录

input 组件封装

v-model用在组件上

显示和隐藏密码

封装switch组件

实现转换的功能

设置checkbox


input 组件封装

首先input组件的基本框架和样式:

<div class="miao-input"><input class="miao-input_inner" >
</div>
<style lang="scss" scoped>.miao-input {width: 100%;position: relative;font-size: 14px;display: inline-block;.miao-input_inner {-webkit-appearance: none;background-color: #fff;background-image: none;border: 1px solid #dcdfe6;border-radius: 4px;box-sizing: border-box;color: #606266;display: inline-block;font-size: inherit;height: 40px;line-height: 40px;outline: none;padding: 0 15px;transition: border-color .2s cubic-bezier(.645, 045, .355, 1);width: 100%;&:focus {outline: none;border-color: #409eff;}// input禁用样式&.is-disabled {background-color: #f5f7fa;border-color: #e4e7ed;color: #c0c4cc;cursor: not-allowed;}}}// 后面加suffix的意思是后面如果有后缀的话,触发该样式.miao-input_suffix {.miao-input_inner {padding-right: 30px;}.miao-input_suffix {position: absolute;right: 10px;height: 100%;top: 0;line-height: 40px;text-align: center;color: #c0c4cc;transition: all .3s;z-index: 900;i {color: #c0c4cc;font-size: 14px;cursor: pointer;transition: color .2s cubic-bezier(.645, .045, .355, 1);}}}
</style>

v-model用在组件上

首先app.vue里:

<miao-input v-model="username">
</miao-input>
data(){
return {
username:'ss'
}
}

在input.vue里:

props:{
value:{
type:String,
default:''
}
}
 <input class="miao-input_inner" :class="{'is-disabled': disabled}":placeholder="placeholder" :type="type" :name="name":disabled="disabled":value="value">

除了value之外还要触发事件

@input="handleinput"   
methods:{handleinput(e){
// this.value=e.target.value是不行的因为直接改了父组件传的参数
this.$emit('input',e.target.value)
// 触发这个事件}}

添加图标

<span class="miao-input_suffix"><i class="miao-input_icon miao-icon-cancel" v-if="clearable" @click="clear"></i><i class="miao-input_icon miao-icon-visible" v-if="showPassword"></i></span>
<div class="miao-input" :class="{'miao-input_suffix': showSuffix}">
computed:{showSuffix(){return this.clearable || this.showPassword}},

点击图标清空内容:

 clear(){this.$emit('input','')// 父组件就会清空}

显示和隐藏密码

<i class="miao-input_icon miao-icon-visible" v-if="showPassword" @click="handlePassword"></i>
 :type="showPassword ? (passwordVisible ? 'text':'password'):type"

 如果传来show-password判断是否需要切换密码显示,如果不传不判断 

封装switch组件

只要是表单元素都支持name属性

switch初始模版:

<template><div class="one-switch"><span class="one-switch_core"><span class="one-switch_button"></span></span></div>
</template>

css:

.miao-switch {display: inline-block;align-items: center;position: relative;font-size: 14px;line-height: 20px;vertical-align: middle;.miao-switch_core {margin: 0;display: inline-block;position: relative;width: 40px;height: 20px;border: 1px solid #dcdfe6;outline: none;border-radius: 10px;box-sizing: border-box;background: #dcdfe6;cursor: pointer;transition: border-color .3s, background-color .3s;vertical-align: middle;.miao-switch_button {position: absolute;top: 1px;left: 1px;border-radius: 100%;transition: all .3s;width: 16px;height: 16px;background-color: #fff;}}
}// 选中样式
.is-checked {.miao-switch_core {border-color: #409eff;background-color: #409eff;.miao-switch_button {transform: translateX(20px);}}
}// 隐藏input标签
.miao-switch_input {position: absolute;width: 0;height: 0;opacity: 0;margin: 0;
}

v-model绑定组件里的value和触发的事件:
 

props:{value:{type:Boolean,default:false}},methods:{handleClick(){this.$emit('input',!this.value)}}

实现转换的功能

<label class="miao-switch" :class="{'is-checked': value}" @click="handleClick">
// 选中样式
.is-checked {.miao-switch_core {border-color: #409eff;background-color: #409eff;.miao-switch_button {transform: translateX(20px);}}
}

根据传入switch.vue的两个颜色来控制:

nexttick是基于promsie的封装,这里用语法糖async和await,用nexttick等数据修改后dom更新完毕再更改按钮颜色

methods:{async handleClick(){this.$emit('input',!this.value)//点击时候还要修改背景色//等待value发生变化再setcolor//把数据改了发生更新//nexttick基于promise封装//数据修改后等待dom更新再修改按钮颜色await this.$nextTick()this.setColor()},setColor() {//修改开关颜色,必须传入其一的颜色if (this.activeColor || this.inactiveColor) {let color = this.value ? this.activeColor : this.inactiveColorthis.$refs.core.style.borderColor = colorthis.$refs.core.style.backgroundColor = color}}},mounted(){this.setColor()}

设置checkbox

用户使用switch组件实际上当成表单元素使用,可能用到name属性,需要在switch组件中添加一个checkbox,当值改变时候,需要设置checkbox的value值

同步checkbox里的checked值,一进来mounted和切换时候设置值

点击label相当于点击input框

<!-- 外面的大框架如果用label会触发两次,抵消了 --><input class="miao-switch_input" type="checkbox" :name="name" ref="input">
 async handleClick(){this.$emit('input',!this.value)//点击时候还要修改背景色//等待value发生变化再setcolor//把数据改了发生更新//nexttick基于promise封装//数据修改后等待dom更新再修改按钮颜色await this.$nextTick()this.setColor()this.$refs.input.checked = this.value},
mounted(){this.setColor()//控制checkbox的值this.$refs.input.checked=this.value//input值和value同步}

具体代码: 

GitHub - Alicca-miao/component-library-vue-ui-Contribute to Alicca-miao/component-library-vue-ui- development by creating an account on GitHub.icon-default.png?t=N7T8https://github.com/Alicca-miao/component-library-vue-ui-

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

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

相关文章

网络编程(四)

一、使用wireshark抓包分析协议头 &#xff08;一&#xff09;wireshark常用的过滤语句 tcp.port <想要查看的端口号> ip.src <想要查看的源IP地址> ip.dest <想要查看的目的IP地址> ip.addr <想要查看的IP地址>&#xff08;二&#xff09;抓包分…

Burp Suite Professional 2024.5 (macOS, Linux, Windows) - Web 应用安全、测试和扫描

Burp Suite Professional 2024.5 (macOS, Linux, Windows) - Web 应用安全、测试和扫描 Burp Suite Professional, Test, find, and exploit vulnerabilities. 请访问原文链接&#xff1a;Burp Suite Professional 2024.5 (macOS, Linux, Windows) - Web 应用安全、测试和扫描…

IP服务器代理如何设置使用?

IP服务器代理&#xff08;通常称为代理IP或代理服务器&#xff09;的设置和使用方法可以根据不同的需求和场景而有所不同。以下是一个清晰的步骤指南&#xff0c;帮助你设置和使用IP服务器代理&#xff1a; 1. 选择合适的代理IP类型 根据使用目的的不同&#xff0c;可以选择不…

如何将ai集成到项目中,方法二

上一篇文章&#xff1a;如何将ai集成到radsystems项目中&#xff0c;在项目中引入ai-CSDN博客 上一篇文章内容主要针对于未实现权限分离的项目&#xff0c;这篇文章主要来说一下权限分离的项目怎么做&#xff0c;以及注意的细节。 一、编写前端router.js 二、编写前端askai.vu…

基础-02-数据通信基础

文章目录 1.信道特征1.1 数据通信概念1.2 信道特性-信道带宽W1.3 信道特性-码元和码元速率1.4 信道特性-奈奎斯特定理1.5 信道特性-香农定理1.6 带宽/码元速率/数据速率关系梳理1.7 练习题 2.信道延迟2.1 信道延迟概念2.2 信道延迟计算2.3 练习题 3. 传输介质3.1 传输介质概念3…

4/8路 HDD/SSD 1080 车载NVR,高清车载录像机(8路1080P硬盘机

4/8路 HDD/SSD 1080 车载NVR 产品主要特点&#xff1a; -支持4/8路实时高清数字 1080P录像 -硬盘记录数据&#xff08;最大支持2TB&#xff09; -支持GPS全球定位, 可选模块 -支持WIFI高速自动下载功能, 可选模块 -内置3/4G模块&#xff0c;实时预览和远程管理&#xff0c…

浏览器实时播放摄像头数据并通过 Yolo 进行图像识别

安装 Ultralytics 之后&#xff0c;可以直接通过本地获取摄像头数据流&#xff0c;并通过 Yolo 模型实时进行识别。大多情况下&#xff0c;安装本地程序成本比较高&#xff0c;需要编译打包等等操作&#xff0c;如果可以直接通过浏览器显示视频&#xff0c;并实时显示识别到的对…

汇编中标签的引用$符号

一个c/c开发人员&#xff0c;居然不会汇编&#xff0c;真是惭愧。趁着闲暇时间学习一下汇编&#xff0c;曲不离口&#xff0c;码不离手。看一个简单的例子&#xff1a; .section .datavalue:.quad 200.section .text .global main main:nopMOVL value, %eaxret 就这一条指令&…

计算机网络:网络层 - IPv4地址

计算机网络&#xff1a;网络层 - IPv4地址 分类编址划分子网子网掩码 无分类编址 CIDRCIDR 地址块构造超网 在酒店中&#xff0c;每个房间都有门牌号码&#xff0c;服务员送餐时&#xff0c;就可以根据门牌号码来判断一份餐要送到那个房间。 在网络中也是如此&#xff0c;一份…

订单排队模式 :强复购,无库存担忧

库存积压&#xff0c;意味着资金的束缚和机会的错失&#xff1b;库存不足&#xff0c;又可能导致客户流失和市场机会的丧失。订单排队模式的核心理念是通过排队出局奖励、直推优先和代理商等机制&#xff0c;激发消费者的购买热情&#xff0c;同时确保库存的流动性和销售的增长…

八字综合测算网整站源码程序/黄历/灵签/排盘/算命/生肖星座/日历网/周公解梦

八字综合测算网整站源码程序/黄历/灵签/排盘/算命/生肖星座/日历网/周公解梦 演示地址&#xff1a; https://s24.gvyun.com/ 手机端地址&#xff1a; https://ms24.gvyun.com/ 网站功能分类&#xff1a; 八字&#xff1a;八字测算&#xff1b;日干论命&#xff1b;称骨论命…

ERP管理系统解决方案(附ERP流程和详细解决方法)

ERP 是专门为制造企业设计的综合性管理解决方案&#xff0c;旨在优化制造业务流程&#xff0c;整合各个部门和环节&#xff0c;实现生产、供应链、质量控制和销售等方面的高效协同。 传统的制造行业会面临哪些业务痛点&#xff0c;会考虑erp解决方案&#xff1a; 生产成本高昂…

LeetCode452用最少数量的箭引爆气球

题目描述 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#xff0c;其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处…

华为数据驱动的企业数字化转型之路

华为数据驱动的企业数字化转型之路 数据驱动的数字化转型是企业未来发展的关键。通过构建完善的数据治理体系&#xff0c;包括差异化的数据管理、面向业务的信息架构、数据底座建设和自助数据服务&#xff0c;企业可以提升数据的利用效率和决策能力。本文将根据华为数据治理相…

Idea多线程调试

在 IntelliJ IDEA 中调试多线程应用程序可能会有些复杂&#xff0c;因为多个线程可能会同时运行和交互。不过&#xff0c;IDEA 提供了一些强大的工具来帮助你进行多线程调试。以下是一些关键步骤和技巧&#xff0c;帮助你有效地调试多线程应用程序&#xff1a; 创建一个示例多线…

《精通ChatGPT:从入门到大师的Prompt指南》附录C:专业术语表

附录C&#xff1a;专业术语表 本附录旨在为读者提供一本全面的术语表&#xff0c;帮助理解《精通ChatGPT&#xff1a;从入门到大师的Prompt指南》中涉及的各种专业术语。无论是初学者还是高级用户&#xff0c;这些术语的定义和解释将为您在使用ChatGPT时提供重要参考。 A AI&…

Linux中Web服务器配置和管理(Apache)

文章目录 一、WEB服务器介绍1.1、WEB服务器概述1.2、WEB服务器的发展历史1.3、WEB服务器的优点与缺点1.4、WEB服务器的工作流程 二、Apache介绍2.1、Apache是什么2.2、Apache的发展史与应用场景2.3、Apache的特点2.4、Apache的工作原理2.5、Apache的模块 三、安装使用Apache服务…

调用百度API实现图像多主体检测

目录 1. 作者介绍2&#xff0e;百度API介绍与获取2.1 API介绍2.2 注册账号并获取API Key 3&#xff0e;完整实验代码&#xff0c;测试结果3.1 调用API3.2框出主体部分&#xff0c;并标注标签和置信度3.3 测试结果 1. 作者介绍 邓富贵&#xff0c;男&#xff0c;西安工程大学电…

【动态规划】| 详解路径问题之地下城游戏 力扣174 (困难题)

&#x1f397;️ 主页&#xff1a;小夜时雨 &#x1f397;️专栏&#xff1a;动态规划 &#x1f397;️如何活着&#xff0c;是我找寻的方向 目录 1. 题目解析2. 代码 1. 题目解析 题目链接: https://leetcode.cn/problems/minimum-path-sum/description/ 建议先看一下前面…

Character Region Awareness for Text Detection论文学习

​1.首先将模型在Synth80k数据集上训练 Synth80k数据集是合成数据集&#xff0c;里面标注是使用单个字符的标注的&#xff0c;也就是这篇文章作者想要的标注的样子&#xff0c;但是大多数数据集是成堆标注的&#xff0c;也就是每行或者一堆字体被整体标注出来&#xff0c;作者…