如何优雅的设置UI库组件的属性?
UI库提供了很多组件,组件又带有很多属性,有一些常用属性我们可以记住并且手撸,但是有些不常用的属性,或者需要设置多个属性,这样的情况下写起来就麻烦了,有时候还要打开帮助文档看看属性是怎么设定的,需要设置什么样的属性值。
那么有没有优雅的方式来设置组件的各种属性呢?我做了一个在线小工具,可以方便的设置属性,并且可以实时看到效果。
演示地址
https://naturefw.gitee.io/nf-rollup-ui-controller/
源码
https://gitee.com/naturefw/nf-rollup-ui-controller
技术栈
- vite:^2.6.4
- vue3: ^3.2.16
- element-plus: ^1.2.0-beta.3
- @element-plus/icons: ^0.0.11
特点
- 可以选择组件类型,文本、数字、日期、select、checkbox、radio、等等;
- 根据选择的组件类型,设置对应的属性,按需设置,不显示“无效”属性;
- 可以实时显示效果,设置属性后可以立即看到效果,方便调整属性;
- 设置好的属性可以生成js的对象和模板代码,支持 json 格式;
- 大部分属性值都可以通过鼠标点击的方式生成,少数的需要手敲;
工作量比较大、精力有限,目前仅支持 element-plus 的部分组件,理论上可以支持任何UI库,只是设置属性有点太繁琐了,需要时间进行学习、掌握和理解,把相关属性合在一起,还有调试演示代码等工作。
有没有感兴趣的小伙伴来帮帮忙?
实现思路
实现方法比较土,就是把需要的组件分个类,再把需要的属性分成两种:基础属性、扩展属性,然后就是力气活了,把各种属性整理出来即可。
大类原则
主要是看内容,文本、日期、数字很明显的可以分别归类,选择和下拉都是选择类型的,分成两类主要是小分类比较多,分开更清晰一些。
小类原则
- 按照UI库提供的组件
- 按照功能,“原子”级别
- 按照值的类型,比如数组和非数组。
范围类的组件,值的类型是数组,非范围型的组件,值的类型不是数组,在动态改变某属性值的时候,数组和非数组有的时候不能自动变更类型,导致代码出错。
这样就需要把范围类的和非范围类的分开,比如 select 的单选模式和多选模式,只是一个 “multiple” 属性的区别,但是这个属性不能在运行时修改,否则会报错,所以只好分成两个小类。
好吧,其实你不用关心这些。
举例
el-input 可以细分为多个小类:单行文本,多行文本,密码,URL,可选等。
为什么要细分呢?因为不同的小类需要的属性是不同的,细分一下可以缩小备选的属性范围,设置起来更清晰,否则像官网那样,各种属性都堆在一起,还得分辨一下是否是支持某个小类。
比如 “show-word-limit” 仅支持单行文本和多行文本,并不支持其他小类。如果我要设置一个密码组件的属性,那么就不需要显示 “show-word-limit”这个属性,否则看起来就会比较乱。
所以通过细分小类的方式显示需要的属性,避免混淆。
基础属性
表单里的组件共有的属性:
基本上表单里的组件都需要这几个属性,所以拿出来作为基础属性,一起设置。
扩展属性按照分类分别设置。
文本类
- 单行文本
- 可以选择的文本
- 设置颜色
数字类
- 数字
- 滑块
- 评分
其实最大值没有做限制,可以>5
日期类
- 日期
- 日期范围
选择类
- 开关
- 多选
下拉类
- 单选下拉列表框
不一一列举了,感兴趣的小伙伴可以看在线演示。
https://naturefw.gitee.io/nf-rollup-ui-controller/
生成模板和代码
属性设置完毕之后,可以生成template模板代码,以及js里定义的对象,支持json格式。
- 模板
<el-checkbox-group
v-model="checkboxs"
v-bind="itemProps"
>
<el-checkbox
v-for="item in itemProps.optionList"
:key="'check' + columnId + item.value"
:label="item.value"
:disabled="item.disabled"
>
{{item.label}}
</el-checkbox>
</el-checkbox-group>
- js代码
const itemProps = reactive({
colName: 'test',
kind: 15,
controlType: 152,
colCount: 0,
isClear: false,
clearable: true,
optionList: [
{
value: '1',
label: '选项1',
disabled: false
},
{
value: '2',
label: '选项2',
disabled: false
},
{
value: '3',
label: '选项3',
disabled: false
},
{
value: '4',
label: '选项4',
disabled: false
}
]
})
- json 格式
{
"colName": "test",
"kind": 15,
"controlType": 152,
"colCount": 0,
"isClear": false,
"clearable": true,
"optionList": [
{
"value": "1",
"label": "选项1",
"disabled": false
},
{
"value": "2",
"label": "选项2",
"disabled": false
},
{
"value": "3",
"label": "选项3",
"disabled": false
},
{
"value": "4",
"label": "选项4",
"disabled": false
}
]
}
为啥要支持json呢?大家可以猜一猜。
时间仓促,可能有一点小bug,还有属性值是对象的情况,暂时还没有支持;属性是组件(比如图标)的情况,支持的也不理想。
已知的几个小问题:
评分的小星星为啥显示不全?
目前没找到原因。颜色值的返回类型为啥不变?
类型好像不能在运行时修改,运行前设置类型是有效的。日期组件的“年周”类型,同时设置显示格式和返回格式,会出错。
在线演示做了封装(不支持自定义格式),所以没出错,但是原生组件不支持两个属性一起设置,或者是我使用的方式不对。
如何优雅的设置UI库组件的属性?的更多相关文章
- 封装一个优雅的element ui表格组件
现在做后台系统用vue + elementUI 的越来越多,那element ui的 el-table 组件肯定也离不开.虽然element ui的table组件很好.但是表格和分页是分离的.每次写表 ...
- 通过UI库深入了解Vue的插槽的使用技巧
Vue官网对于插槽的介绍比较简略,插槽本身也比较"烧脑",很容易看晕,我就一直没看懂,直到 使用了element-plus的组件的插槽. 其实我们可以换一个角度来理解插槽,就会豁然 ...
- 【摸鱼神器】UI库秒变LowCode工具——列表篇(一)设计与实现
内容摘要: 需求分析 定义 interface 定义 json 文件 定义列表控件的 props 基于 el-table 封装,实现依赖 json 渲染 实现内置功能:选择行(单选.多选),格式化.锁 ...
- 开源 UI 库中,唯一同时实现了大表格虚拟化和树表格的 Table 组件
背景 有这样一个需求,一位 React Suite(以下简称 rsuite)的用户,他需要一个 Table 组件能够像 Jira Portfolio 一样,支持树形数据,同时需要支持大数据渲染. 截止 ...
- 免费的Android UI库及组件推荐
短短数年时间Android平台就已经形成了一个庞大而活跃的开发者社区.许多社区开发的项目业已进入成熟阶段,甚至可以用于商业的软件生产中,且不用担心质量问题. 本文编译自androiduipattern ...
- 利用sass构建组件化的ui库
创建公用的Sass项目模板 在做项目时,不管什么项目,他们之间总是有一些可以共用的部分.比如说重置样式.公用样式.模块组件.UI库等.那么在Sass项目中也是如此.为了避免在每个项目中做一些相同的事情 ...
- ElementUI(vue UI库)、iView(vue UI库)、ant design(react UI库)中组件的区别
ElementUI(vue UI库).iView(vue UI库).ant design(react UI库)中组件的区别: 事项 ElementUI iView ant design 全局加载进度条 ...
- 推荐 9 个样式化组件的 React UI 库
简评:喜欢 CSS in JS 吗?本文将介绍一些使用样式组件所构建的 React UI 库,相信你会很感兴趣的. 在 React 社区,对 UI 组件进行样式化的讨论逐步从 CSS 模块到内联 CS ...
- 小程序-文章:微信小程序常见的UI框架/组件库总结
ylbtech-小程序-文章:微信小程序常见的UI框架/组件库总结 1.返回顶部 1. 想要开发出一套高质量的小程序,运用框架,组件库是省时省力省心必不可少一部分,随着小程序日渐火爆,各种不同类型的小 ...
随机推荐
- Spring Boot简单操作
目录 一.自定义异常页面 二.单元测试 三.多环境选择 四.读取主配置文件中的属性 五.读取List属性 一.自定义异常页面 对于404.405.500等异常状态,服务器会给出默认的异常页面,而这些 ...
- 【Python】【Module】os
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os.curd ...
- list.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@tag ...
- 【Spark】【RDD】从HDFS创建RDD
1.在HDFS根目录下创建目录(姓名学号) hdfs dfs -mkdir /zwj25 hdfs dfs -ls / 访问 http://[IP]:50070 2.上传本地文件到HDFS hdfs ...
- Jenkins配置管理工具
安装完成后,配置管理工具 安装并配置git yum -y install git 编辑git环境变量为/usr/bin/git 安装并配置maven wget https://mirrors.tuna ...
- 【dva】dva的基本用法
services 该文件夹用于存储services,里面的内容为接口调用函数,记得将数据返回.(request是我自己封装函数,也可以用axios原生的函数) const finishTask = { ...
- Windows 10 彻底关闭 Antimalware Service Executable 降低内存占用
概述 最近给内网的一台电脑安装 Windows 10 专业版系统,由于此电脑不会涉及到不安全因素,所以杀毒软件非必须. 以最大限度节省系统资源考虑,默认安装的 Micoroft Defender 占用 ...
- SpringMVC 入门、请求、响应
目录 SpringMVC 概述 SSM 简介 MVC 简介 SpringMVC 简介 入门案例 Spring 技术架构 SpringMVC 基础配置 常规配置 Controller 加载控制 静态资源 ...
- docker初识-docker安装、基于docker安装mysql及tomcat、基本命令
一.docker是什么 用go语言开发,开源的应用容器引擎,容器性能开销极低 二.整体架构图 Docker 包括三个基本概念: 镜像(Image):Docker 镜像(Image),就相当于是一个 r ...
- Django中的常用字段类型与参数
Django中的常用字段类型 1. 数值型 以下都是数值相关的,比如AutoField,它在MySQL中的类型为int(11),而BooleanField在MySQL中对应的类型是tinyint(1) ...