08 - Vue3 UI Framework - Input 组件
2021-12-16 09:39
656 查看
接下来再做一个常用的组件 -
input组件返回阅读列表点击 这里
需求分析
开始之前我们先做一个简单的需求分析
input
组件有两种类型,即input
和textarea
类型- 当类型为
textarea
时,可以自定义行高,但是当类型为input
时,行高恒为1
- 可以自定义外边框的颜色
- 可以设置为禁用
那么可以得到如下参数表格
参数 | 含义 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
value | 绑定值 | string | 字符串 | 必填 |
theme | 类型 | string | input / textarea | input |
rows | 行高,当 theme 为 input 时值恒为 1 | number | 正整数 | 5 |
color | 外边框颜色 | string | 任意合法颜色值 | #8c6fef |
disabled | 是否禁用 | boolean | false / true | false |
骨架
实际上我们这里是根据
theme值判断,然后去渲染原生的
input或者
textarea组件,所以可以很容易得到骨架,代码如下:
<template> <input v-if="theme === 'input'" class="jeremy-input-input" :style="{ '--color': color }" v-model="text" @input="change" /> <textarea v-else class="jeremy-input-textarea" :rows="rows" :style="{ '--color': color }" v-model="text" @input="change" /> </template>
功能
首先,我们再
Typescript中声明一些需求分析中的属性:
declare const props: { value: string; theme?: "input" | "textarea"; rows?: number; color?: string; }; declare const context: SetupContext;
然后,再在
export default中写入声明的参数:
export default { install: function (Vue) { Vue.component(this.name, this); }, name: "JeremyInput", props: { value: { type: String, required: true, }, theme: { type: String, default: "input", }, rows: { type: Number, default: 5, }, color: { type: String, default: "#8c6fef", }, }, };
最后再补全
setup:
setup(props, context) { const text = ref(props.value); const change = () => { context.emit("update:value", text.value); }; return { text, change }; },
样式表
补全层叠样式表
<style lang="scss"> $theme-color: var(--color); [class^="jeremy-input"] { resize: none; padding: 8px; border-radius: 4px; border: none; box-shadow: 0px 0px 3px 0px $theme-color; outline: none; width: 100%; &[disabled] { box-shadow: 0px 0px 3px 0px gray; } } </style>
测试
创建一个测试页,导入
JeremyInput组件,看一下效果:
项目地址 🎁
GitHub: https://github.com/JeremyWu917/jeremy-ui
官网地址 🌍
JeremyUI: https://ui.jeremywu.top
感谢阅读 ☕
相关文章推荐
- 09 - Vue3 UI Framework - Table 组件
- 10 - Vue3 UI Framework - Tabs 组件
- Angular2父子组件之间数据传递:@Input和@Output (下)
- MapReduce之数据读取组件InputFormat原理解析
- 关于polymer原生组件paper-input的部分属性的使用心得
- JS组件系列——Bootstrap文件上传组件:bootstrap fileinput
- 小程序组件input:真机键盘弹窗遮盖输入框一部分样式
- 通过ajax上传input组件文件
- 如何在iview中使用rander函数渲染Select组件和input组件
- 【angular】组件:@Input() @Output() 输入属性和输出属性以及中间人模式的使用 (一)
- 【angular】组件:@Input() @Output() 输入属性和输出属性以及中间人模式的使用 (一)
- 微信小程序原生组件封装之input校验
- 原创:微信小程序之MaterialDesign--input组件
- VUE复习深入学习08. 动态组件&异步组件 以及一些注意事项!
- Logstash组件详解(input、codec、filter、output)
- 《用EOM的眼光评判‘我要做全国最最好的标准权限组件和通用权限管理软件’3》(2010/04/08)
- Angular 组件之间数据的传递 之 @Input @Output
- Flex中TextInput组件用restrict限制某些字符的输入用法
- form表单的input组件的10种提交方式
- ReactNative TextInput 组件