范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

OpenDataV低代码平台新增组件流程

  前天我们发布了OpenDataV低代码开源框架,有很多友友留言想要了解怎么增加组件,为了方便大家快速上手,马上趁热发布一篇。
  OpenDataV计划采用子库的方式添加子组件,即每一个组件都当做一个子库,子库有自己的依赖,而项目本身的依赖只针对框架,因此每一个组件我们都当做一个子库来开发。下面我带着大家一步步详细地开发一个数字展示组件。 创建组件目录和文件进入组件库目录下
  所有的可拖拽组件都存放在 src/resource/components 目录下cd src/resource/components 根据组件名称创建目录
  默认组件目录是以组件的名称命名,当然也可以根据自己的要求命名,组件可以放在 components 目录下,也可以放在其子目录的目录下。mkdir DigitalText 创建组件所需的固定文件
  每个组件必须的文件有vue文件 xxx.vue 、配置文件config.ts 、导出文件index.ts ,每个文件有自己的用处,vue文件不用说了是组件渲染的主体,导出文件名称固定为index.ts ,主要是导出组件的信息给外部引用,配置文件主要是在编辑页面右侧展示的配置项,这个我们后面再详述。所以这里我们需要创建三个文件:DigitalText.vue、config.ts、index.ts
  以上我们就创建好了组件所需的文件,下面就需要做组件的初始化了 初始化组件文件
  因为我们的组件都是以子库的方式引入,所以需要进行包的初始化,执行以下命令 cd src/resource/components/Text/DigitalText  npm init
  这里使用 npm 初始化包会让我们选择填写部分数据。
  下面我们先初始化一下组件文件 DigitalText.vue ,先初始化最简单的组件数据    
  然后我们要初始化组件的配置文件 config.ts import { ComponentGroup, FormType } from "@/enum" import type { PropsType } from "@/types/component" import { BaseComponent } from "@/resource/models"  export const componentName = "Digital" class DigitalComponent extends BaseComponent {   constructor(id?: string, name?: string, icon?: string) {     super({       component: componentName,       group: ComponentGroup.TEXT,       name: name ? name : "数字文本",       id,       width: 100,       height: 30,       icon     })   } }  export default DigitalComponent
  这里要说明的点: componentName 是组件在项目中的注册名称,因此必须保证唯一,group 是给组件分组,这里的分组主要是展示在组件拖拽页面,其类型的ComponentGroup 是固定好的,可以自己增加,展示位置如下:
  name 是组件在拖拽页面上显示的名称,width 和height 是组件拖拽到画布上显示的初始大小
  配置完组件后数据后,就可以配置导出文件 index.ts 了,主要是导出组件名、组件对象和配置项。import DigitalTextComponent, { componentName } from "./config"  export default {   componentName,   component: () => import("./DigitalText.vue"),   config: DigitalTextComponent }
  初始化到这一步,我们的组件已经可以在编辑页面正常使用了,看一下效果:
  在右边的编辑页面我们看到有 样式 和属性 ,所有的组件都包含基础样式位置大小 ,包括组件的上下边距和宽高,属性包含公共属性,其中组件 和组件ID 无法修改,主要是展示来看的,名称 可以修改,名称属性主要是展示在图层上,修改名称后图层上会响应的显示修改后的名称。
  这是最基础的组件,只能展示固定数据,不能进行任何配置,下面我们要做组件的配置项。 组件配置项样式配置
  作为文字显示组件,最基础的字体相关属性配置应该要有,比如 字体、字体颜色、字体大小、字体宽度 ,配置项依然是在配置文件中添加,继承自基础组件类的私有属性_style class DigitalTextComponent extends BaseComponent {   constructor(id?: string, name?: string, icon?: string) {......}   _style: PropsType[] = [     {       label: "字体设置",       prop: "font",       children: [         {           prop: "color",           label: "颜色",           type: FormType.COLOR,           componentOptions: {             defaultValue: "skyblue"           }         },         {           prop: "fontSize",           label: "字体大小",           type: FormType.NUMBER,           componentOptions: {             defaultValue: 20           }         },         {           prop: "fontWeight",           label: "字体宽度",           type: FormType.FONT_WEIGHT,           componentOptions: {             defaultValue: 200           }         },         {           prop: "fontFamily",           label: "字体",           type: FormType.FONT_STYLE,           componentOptions: {             defaultValue: "Arial"           }         }       ]     }   ] }
  样式配置的格式已经定义好了,其中需要注意的是所有 children 下的子项中prop 必须是html 元素的css 属性,具体的css 属性名称并不是我们在style 文件中填写的,而是在js 中对应的名称,这个可以在网上搜索:css3 中文手册 ,类似如下:
  我们再详述一下各配置项的意义: label:配置显示的分组名 prop:唯一的属性区分,此属性要与同级别中的其他配置不同 children:此属性组下面的配置项 label:每个属性的名称prop: css 属性值type:属性编辑时显示的组件类型,目前可显示的组件是固定的,类型都定义在 FormType 中componentOptions:属性对应的配置项,不同类型的组件有不同的配置项,具体可以在 src/types/component.d.ts 中查看定义,所有配置都有defaultValue 配置,作为属性初始化时的默认值
  配置完样式后,我们在编辑页面看一下效果:
  搞清楚了样式的配置,下面我们再说说属性的配置,属性配置与样式配置格式一致,有一些小细节需要注意。 属性配置
  属性配置是继承私有变量 _prop ,配置格式与样式相同,我们这里配置一个示例属性:class DigitalTextComponent extends BaseComponent {   constructor(id?: string, name?: string, icon?: string) {......}   _prop: PropsType[] = [       {         label: "数据配置",         prop: "dataconfig",         children: [           {             prop: "data",             label: "数据",             type: FormType.NUMBER,             componentOptions: {               defaultValue: 100000,               max: 99999999,               min: 0             }           }         ]       }     ] }
  格式这里就不解释了,这里我们用到了数值类型,因此可以配置最大最小值。
  接下来就是要在 vue 文件中使用属性配置了,属性不像样式,样式是html 元素本身就支持的,因此只要我们配置好,就可以生效了,但是属性是组件专有的,什么属性要产生什么效果全凭我们自己书写逻辑,因此配置好属性我们只会在编辑页面看到属性展示和配置,但是实际配置后是没有任何效果的,具体效果我们在vue 中实现。属性使用
  首先我们要添加一个类型定义文件,因为 ts 最基础的优势就是类型提示,而我们封装的组件基类是通用的,因此需要在每个组件中使用自己的属性类型定义,定义如下:// DigitalText/type.ts export interface DigitalType {   dataconfig: {     data: number   } }
  为了准确地进行提示,类型定义必须和属性配置一致,具体来讲就是 children 下面的prop 作为属性值,children 外面的prop 作为属性键,可以对比一下type.ts 中的配置和_prop 的配置。
  组件的配置信息是通过外部传入的,所以所有组件都必须接收外部数据,我们已经定义好了固定的格式 const props = defineProps<{   component: DigitalTextComponent }>()
  组件相关的所有信息都将通过 component 传入进来,为了监听属性变化和类型提示,我们封装了一个hook,减少每个组件中通用的处理,useProp 的使用如下:const propChange = (prop: string, key: string, value: number) => {   console.log(prop, key, value) }  const { propValue } = useProp(props.component, propChange)
  useProp 接收三个参数,一个是component ,主要是为了添加类型提示,所以这里也传入了一个泛型定义,就是我们在type.ts 中定义的类型,另外两个参数是属性变化回调函数和样式变化回调函数。一般情况下我们只需要处理属性变化回调,样式变化是自动生效的,所以基本上不用处理,如果有特殊需求才需要。属性变化回调函数中有三个参数,prop 对应的是属性配置中外层的prop 值,key 对应的是属性配置中children 中的prop 值,而value 就是属性变化的值。
  最终我们的属性处理结果如下:     
  看一下页面上的效果:
  上面我们用了属性回调去处理值变化响应,实际上还有其他的方式可以处理,我们要明白属性回调的根本需求是什么?主要就是为了编辑了对应的属性后,我们在组件内能监测到变化反馈到显示上。相同这一点,可用的方法就多了。 直接使用 props 传递的属性值在template 中渲染数据      属性变化回调的另一种用法     
  属性变化回调接收任何参数,我们可以选择接收参数,也可以不接收参数,在一些配置项比较多的组件中,我们不想在属性回调中去一个一个判断变化的属性,那么就可以使用这种方式,在这种方式中我们只是把属性回调作为一个通知,即通知我们属性发生变化了,而我们不关心哪一个属性发生了变化,把所有的属性都修改一遍即可,虽然听起来比较麻烦,但是在一些复杂组件中确实很有作用。在这里我们要明白,只要属性发生了变化,那么 prop 中的数据也必定发生了变化,所以我们随时取prop 中的数据它都是最新的。总结
  到这里,一个组件的整个添加过程就讲完了,根据目前的开发进度来看,基本上所有的部分都讲到了,如果有人在使用过程中发现了什么问题或者有哪些地方不够清楚的,可以在项目的issue中提,也可以通过其他方式反馈。

KPL4大名帅1人退隐,1人转幕后,kear发挥不稳,SK一家独大当前的KPL联盟,各队伍的实力依旧是参差不齐,这也是一个正常现象,符合队伍的发展规律。相信不少的小伙伴们也发现了,对一支队伍影响最大的因素,并非是选手们的个人实力,而是队伍的主教练原神2022兑换码分享原神大家新年快乐呀!新的一年来领新的兑换码吧!原神的兑换码一般都在前瞻直播当中发放,前瞻中会有300原石并且有效期限比较短,有时候会猝不及防的过期。而每年都会有1个左右期限一年的兑一文看尽2021游戏圈大事件国产单机井喷,外厂浑浑噩噩开头声明如果本文说了什么厂商不好的地方,不是小航母在黑他们,我只是把它们干出令人智熄的事叙述了一遍,这不是它们自己黑自己么?如果本文说了什么厂商厉害的地方,不是小航母在尬吹他们,是2021年最后的乱斗上王卡组推介提前祝大家新年快乐(章社长Z未来决斗王)攻略决斗王!战队ID6926(志同道合的可以加入)。看着B站的(最美之夜)一边乱斗排位比赛,结果看着看着就上王了,这次用的卡组就是久违的机甲卡组,想不到现在机神途手游凌霄决首测菩提霸体全屏秒怪不死护体尘世浮华,往事如烟,回望昔日1。76复古沉默,流年似水往事如烟!那些如水的时光,那些流年的故事,都变成了无法忘怀的记忆!在后复古时代的今天,经过岁月的沉淀,上万件专属神器,探索永无武侠风游戏山海奇兵上架Steam暂不支持中文近日,由WHM制作发行的山海经题材武侠风格游戏山海奇兵上架Steam,游戏发售日期未知,暂不支持中文,感兴趣的玩家可以将其添加到愿望单中。Steam商店地址山海奇兵是一款穿越武侠风明日方舟新年保底卡池出货率详解新博士福音老博士人手一只瑕光明日方舟对于这次期待已久的跨年欢庆系列的相关主题限定卡池,估计不少玩家已经迫不及待了,等到元旦当天终于正式开启了,玩家自然也是积极的第一时间投入去抽卡,对于这次卡池的具体出货率还有巴菲特唯一的加仓股,到底有什么过人之处?投资圈有个说法,跟着巴菲特走,不会错。尤其是到每个季度伯克希尔哈撒韦持仓报告出炉,势必会引起业界投资者广泛关注。果不其然,近日巴菲特旗下的伯克希尔哈撒韦发布了三季度13F报告,在持挑了19个氢能源股,下周谁会再领风骚风雨看盘本周和下周可以聊的东西不少。总体上,5大热点,下周有分歧也有共识。先说5大热点方向,首选当然是疫苗检测板块,其次是电子烟板块,再次就是汽车配件海运港口以及氢能源板块。虽然周初传来新马斯克否认星链占用地球空间轨道几千颗不算什么近日,中国空间站两次紧急避碰星链卫星的新闻,引起了广泛关注。12月3日,中国常驻维也纳联合国和其他国际组织代表团,向联合国通报了美国太空探索技术公司(SpaceX)发射的星链卫星今韩媒评选世界年度最佳阵容EDG双人组和小虎上榜前段时间LPL赛区和LCK赛区相继公布出了年度最佳阵容,LPL赛区的年度最佳阵容为小虎JiejieScoutViper以及Meiko,而LCK赛区的年度最佳阵容为KhanCanyo
在千岛之国菲律宾游宿雾薄荷岛文熊宗荣与印度尼西亚一样,菲律宾也是一个多岛的国家。全国共由7107个大小岛屿组成。其中最大的有北部的吕宋岛南部的棉兰老岛和中部的萨马岛等11个岛屿,约占菲律宾国土面积的96。在菲郁金香风信子洋水仙银莲花,500多个品种多达300万株鲜花港的春日盛宴正当时阳春三月晴空下,百花妩媚竞相开!恰是春好时,以花为媒与春相遇,择一阳光明媚的日子相约在临港滴水湖畔,来上海鲜花港遇见最美春天!本次花展以鲜花,让生活更美好为主题,通过郁金香风信子洋居庸关花海列车居庸关花海拍摄时间每年3月中旬4月初花期比较短,花开时间大概两周左右地点居庸关花海栈道(免费),在居庸关长城对面,不用进居庸关长城景区交通公交879919昌20路公交,919公交要2023年12月中国31省市快递业务收入排行榜中商情报网讯2023年2月,全国快递业务量完成849。7亿元,同比增长29。3。2023年12月,全国快递业务量累计完成1617。17亿元,同比增长2。7。2023年12月31省市孕妈三胎全是女儿,大15岁老公很生气,公婆却反而给90万每个父母都希望自己的孩子健康快乐地成长,而儿女双全更是许多夫妻共同的期盼。然而,现实往往并不尽如人意,有些家庭可能只有儿子或者只有女儿。这并不是什么大不了的事情,但有些人却因此而心30年前被称断货王的3种酒,现在却很少见,喝过的人都老了时光往回追溯,到30年前,也就是上世纪的八九十年代,在那个车马邮件都慢的时代,不仅娱乐设施非常的简单,就连购物也非常的不便捷,大部分都是凭各种票在供销社里买东西。供销社里除了有大家3000家门店销声匿迹,靠卖中餐自救昔日咖啡大王竟沦落至此?沉浮之间,改卖中餐成了上岛咖啡最后的倔强。作者朱末来源快刀财经(IDkuaidaocaijing)在西式情调的咖啡馆里,吃着湖南小炒肉和毛血旺是种什么体验?这样看似离谱的组合,正出从丹麦到T台约瑟芬斯克里弗约瑟芬斯克里弗(JosephineSkriver)职业模特和演员身高178厘米体重55公斤生日1993年4月14日国籍丹麦约瑟芬是一位丹麦超模,出生于1993年4月14日。她于20日常且带点精致感的穿搭看看漂亮女孩们是怎么展示自己的美!大翻领瞬间打破了暗沉格纹的老气横秋,整体看起来很甜美帅气,可以买一些类似的假领子戴在各种衣服上,瞬间旧衣焕新颜。运动感的单品,添活力。甜美华丽,蓝小野猫妮可现身巴巴多斯,腹肌清晰,气韵独特据每日星报3月28日消息,妮可舒可辛格(NicoleScherzinger)最近发布的照片在网上爆红。这位44岁的小野猫女歌手正在巴巴多斯享受一段狂野的假期,在一系列充盈阳光的照片原来祛斑很简单!快把这个攻略收藏起来斑的种类及表现形式活性斑妊娠斑,黄褐斑,晒斑,黑斑定性斑雀斑,老年斑,色素斑,真皮斑长斑的原因形成原因黑色素细胞向上推移,形成色素沉淀1。不良饮食结构2。缺少维生素3。精神压力大4