如何优雅的设置UI库组件的属性?

简介: 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库,只是设置属性有点太繁琐了,需要时间进行学习、掌握和理解,把相关属性合在一起,还有调试演示代码等工作。


有没有感兴趣的小伙伴来帮帮忙?


实现思路



实现方法比较土,就是把需要的组件分个类,再把需要的属性分成两种:基础属性、扩展属性,然后就是力气活了,把各种属性整理出来即可。


image.png


基础 组件 分类.png


大类原则


主要是看内容,文本、日期、数字很明显的可以分别归类,选择和下拉都是选择类型的,分成两类主要是小分类比较多,分开更清晰一些。


小类原则


  • 按照UI库提供的组件
  • 按照功能,“原子”级别
  • 按照值的类型,比如数组和非数组。


范围类的组件,值的类型是数组,非范围型的组件,值的类型不是数组,在动态改变某属性值的时候,数组和非数组有的时候不能自动变更类型,导致代码出错。


这样就需要把范围类的和非范围类的分开,比如 select 的单选模式和多选模式,只是一个 “multiple” 属性的区别,但是这个属性不能在运行时修改,否则会报错,所以只好分成两个小类。


好吧,其实你不用关心这些。


举例


el-input 可以细分为多个小类:单行文本,多行文本,密码,URL,可选等。


为什么要细分呢?因为不同的小类需要的属性是不同的,细分一下可以缩小备选的属性范围,设置起来更清晰,否则像官网那样,各种属性都堆在一起,还得分辨一下是否是支持某个小类。


比如 “show-word-limit” 仅支持单行文本和多行文本,并不支持其他小类。如果我要设置一个密码组件的属性,那么就不需要显示 “show-word-limit”这个属性,否则看起来就会比较乱。


所以通过细分小类的方式显示需要的属性,避免混淆。


基础属性



表单里的组件共有的属性:


image.png


基础属性


基本上表单里的组件都需要这几个属性,所以拿出来作为基础属性,一起设置。


扩展属性按照分类分别设置。


文本类



  • 单行文本


image.png


  • 可以选择的文本


有备选项的文本框


image.png



可选可填的文本框


image.png



  • 设置颜色


image.png



数字类



  • 数字


image.png


  • 滑块


image.png

image.png


image.png


  • 评分


image.png


其实最大值没有做限制,可以>5


image.png


日期类



  • 日期


image.png

image.png



  • 日期范围


image.png


image.png


选择类



  • 开关


image.png


image.png


  • 多选


image.png

      image.png


下拉类



  • 单选下拉列表框


image.png

image.png



不一一列举了,感兴趣的小伙伴可以看在线演示。


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,还有属性值是对象的情况,暂时还没有支持;属性是组件(比如图标)的情况,支持的也不理想。


已知的几个小问题:



  • 评分的小星星为啥显示不全?


目前没找到原因。


  • 颜色值的返回类型为啥不变?


类型好像不能在运行时修改,运行前设置类型是有效的。


  • 日期组件的“年周”类型,同时设置显示格式和返回格式,会出错。


在线演示做了封装(不支持自定义格式),所以没出错,但是原生组件不支持两个属性一起设置,或者是我使用的方式不对。


相关文章
|
23天前
|
UED
「Mac畅玩鸿蒙与硬件31」UI互动应用篇8 - 自定义评分星级组件
本篇将带你实现一个自定义评分星级组件,用户可以通过点击星星进行评分,并实时显示评分结果。为了让界面更具吸引力,我们还将添加一只小猫图片作为评分的背景装饰。
63 6
「Mac畅玩鸿蒙与硬件31」UI互动应用篇8 - 自定义评分星级组件
|
25天前
|
前端开发 开发者
「Mac畅玩鸿蒙与硬件21」鸿蒙UI组件篇11 - Canvas 组件的静态进阶应用
在鸿蒙应用开发中,Canvas 组件不仅用于基础绘图,还提供了处理复杂路径和渐变效果的多种手段,帮助开发者实现精美的静态图形。本篇将介绍如何在 Canvas 中绘制复杂路径、创建渐变填充效果。
44 7
「Mac畅玩鸿蒙与硬件21」鸿蒙UI组件篇11 - Canvas 组件的静态进阶应用
|
25天前
|
前端开发 开发者
「Mac畅玩鸿蒙与硬件22」鸿蒙UI组件篇12 - Canvas 组件的动态进阶应用
在鸿蒙应用中,Canvas 组件可以实现丰富的动态效果,适合用于动画和实时更新的场景。本篇将介绍如何在 Canvas 中实现动画循环、动态进度条、旋转和缩放动画,以及性能优化策略。
45 6
「Mac畅玩鸿蒙与硬件22」鸿蒙UI组件篇12 - Canvas 组件的动态进阶应用
|
25天前
|
前端开发 开发者
「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用
自定义组件可以帮助开发者实现复用性强、逻辑清晰的界面模块。通过自定义组件,鸿蒙应用能够提高代码的可维护性,并简化复杂布局的构建。本篇将介绍如何创建自定义组件,如何向组件传递数据,以及如何在不同页面间复用这些组件。
35 5
「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用
|
16天前
|
XML 搜索推荐 前端开发
安卓开发中的自定义视图:打造个性化UI组件
在安卓应用开发中,自定义视图是一种强大的工具,它允许开发者创造独一无二的用户界面元素,从而提升应用的外观和用户体验。本文将通过一个简单的自定义视图示例,引导你了解如何在安卓项目中实现自定义组件,并探讨其背后的技术原理。我们将从基础的View类讲起,逐步深入到绘图、事件处理以及性能优化等方面。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和技巧。
|
1月前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
2月前
|
开发框架 JavaScript 前端开发
鸿蒙NEXT开发声明式UI是咋回事?
【10月更文挑战第15天】鸿蒙NEXT的声明式UI基于ArkTS,提供高效简洁的开发体验。ArkTS扩展了TypeScript,支持声明式UI描述、自定义组件及状态管理。ArkUI框架则提供了丰富的组件、布局计算和动画能力。开发者仅需关注数据变化,UI将自动更新,简化了开发流程。此外,其前后端分层设计与编译时优化确保了高性能运行,利于生态发展。通过组件创建、状态管理和渲染控制等方式,开发者能快速构建高质量的鸿蒙应用。
134 3
|
1月前
|
开发框架 JavaScript 前端开发
HarmonyOS UI开发:掌握ArkUI(包括Java UI和JS UI)进行界面开发
【10月更文挑战第22天】随着科技发展,操作系统呈现多元化趋势。华为推出的HarmonyOS以其全场景、多设备特性备受关注。本文介绍HarmonyOS的UI开发框架ArkUI,探讨Java UI和JS UI两种开发方式。Java UI适合复杂界面开发,性能较高;JS UI适合快速开发简单界面,跨平台性好。掌握ArkUI可高效打造符合用户需求的界面。
112 8
|
2月前
|
JavaScript API 开发者
掌握ArkTS,打造HarmonyOS应用新视界:从“Hello World”到状态管理,揭秘鸿蒙UI开发的高效秘诀
【10月更文挑战第19天】ArkTS(ArkUI TypeScript)是华为鸿蒙系统中用于开发用户界面的声明式编程语言,结合了TypeScript和HarmonyOS的UI框架。本文介绍ArkTS的基本语法,包括组件结构、模板和脚本部分,并通过“Hello World”和计数器示例展示其使用方法。
82 1
|
2月前
|
缓存 测试技术 C#
使用Radzen Blazor组件库开发的基于ABP框架炫酷UI主题
【10月更文挑战第20天】本文介绍了使用 Radzen Blazor 组件库开发基于 ABP 框架的炫酷 UI 主题的步骤。从准备工作、引入组件库、设计主题、集成到 ABP 框架,再到优化和调试,详细讲解了每个环节的关键点和注意事项。通过这些步骤,你可以打造出高性能、高颜值的应用程序界面。
下一篇
DataWorks