这里的逻辑稍微复杂一点,大致就是创建一个隐藏的最后在textarea
,然后每次当输入框值发生变化时,将它的value
赋值为组件的textarea
的value
,最后计算出这个隐藏的textarea
的scrollHeight
以及其它padding
之类的值并作为高度返回赋值给组件中的textarea
app.vue
中使用<template><div class="input-demo"><Inputv-model="tel":autosize="{ minRows: 2 }"type="textarea"suffixIcon="edit"placeholder="请输入内容"/></div></template>

文章插图
复合型输入框我们可以使用复合型输入框来前置或者后置我们的元素,如下所示

文章插图
这里我们借助 vue3 中的
slot
进行实现,其中用到了useSlots
来判断用户使用了哪个插槽,从而展示不同样式import { useSlots } from "vue";//复合输入框const slots = useSlots();
同时template
中接收前后两个插槽<template><divclass="k-input"@mouseenter="isEnter = true"@mouseleave="isEnter = false":class="styleClass"><div class="k-input__prepend" v-if="slots.prepend"><slot name="prepend"></slot></div><inputref="ipt"class="k-input__inner":class="inputStyle":disabled="inputProps.disabled"v-bind="attrs":value="https://www.huyubaike.com/biancheng/inputProps.modelValue"@input="changeInputVal"/><div class="k-input__append" v-if="slots.append"><slot name="append"></slot></div></div></template><script setup lang="ts">import { useSlots } from "vue";const styleClass = computed(() => {return {["k-input-group k-input-prepend"]: slots.prepend,["k-input-group k-input-append"]: slots.append,};});//复合输入框const slots = useSlots();</script>
最后给两个插槽写上样式就实现了复合型输入框啦.k-input.k-input-group.k-input-append,.k-input.k-input-group.k-input-prepend {line-height: normal;display: inline-table;width: 100%;border-collapse: separate;border-spacing: 0;.k-input__inner {border-radius: 0 4px 4px 0;}//复合输入框.k-input__prepend,.k-input__append {background-color: #f5f7fa;color: #909399;vertical-align: middle;display: table-cell;position: relative;border: 1px solid #dcdfe6;border-radius: 4 0px 0px 4px;padding: 0 20px;width: 1px;white-space: nowrap;}.k-input__append {border-radius: 0 4px 4px 0px;}}.k-input.k-input-group.k-input-append {.k-input__inner {border-top-right-radius: 0px;border-bottom-right-radius: 0px;}}
在app.vue
中使用<template><div class="input-demo"><Input v-model="tel" placeholder="请输入内容"><template #prepend>http://</template></Input><Input v-model="tel" placeholder="请输入内容"><template #append>.com</template></Input></div></template>
总结一个看似简单的Input
组件其实包含的内容还是很多的,做完之后会发现对自己很多地方都有提升和帮助 。如果你对vue3组件库开发也感兴趣的话可以关注我,组件库的所有实现细节都在以往文章里 , 包括
环境搭建
,自动打包发布
,文档搭建
,vitest单元测试
等等 。如果这篇文章对你有所帮助动动指头点个赞吧~源码地址kitty-ui: 一个使用Vite+Ts搭建的Vue3组件库
推荐阅读
- Vue3实现动态导入Excel表格数据
- Vue3 企业级优雅实战 - 组件库框架 - 3 搭建组件库开发环境
- 带你从0到1开发AI图像分类应用
- 从0到1搭建redis6.0.7续更~
- 从0到1搭建redis6.0.7
- Windows操作系统搭建Lsky Pro
- 红米k40参数详细参数_红米k40参数和配置
- 如何破解压缩包的密码从网盘里面下载了一个压缩包,解压的时候需要输入密码,不知道密码是什么,该怎么
- 【深入浅出 Yarn 架构与实现】1-2 搭建 Hadoop 源码阅读环境
- 【炫丽】从0开始做一个WPF+Blazor对话小程序