- propWillUpdate 的三个参数已恢复,需要仔细测试
- 面板控件的条件上下文,已恢复为经过数据源后的数据了
- 错误的监听上下文导致的数据不变更问题
- 所有类型的条件函数中的上下文参数,拿到的数值将不再是经过数据源后的数据
- 识别纯 Group 的 panel
- Item 第三第四个参数支持不指定
- 新增两种 Group, TabBoxGroup 以及 EditorBoxGroup, 安装 arena-types@0.0.8 可导入
- propWillUpdate 的三个参数在本版本中临时取消
- 面板 pluginData 与插件 loader 回写冲突问题
- 默认值为 (Boolean)false, (Number)0 或 (String)'' 时无法绑定的问题
- 循环 watch 的问题
-
基类 ArenaPluginDOM 将不再默认提供,需要手动引入,方式如下:
安装 arena-types 到本地, 并添加代码 import { ArenaPluginDOM } from 'arena-types';
生命周期以及其他内置对象无变更
-
为了支持动态的面板设置,0.1 的插件系统的 config 字段以及相应的 json 配置已经无效
如 plugin.json 中配置的 config 字段以及其指向的文件均已无效,详细面板选项设置请往后阅读
{
"name": "Arena 官方默认图表插件",
"pluginId": "official.arena.charts",
"author": "Arena",
"description": "Arena 官方插件图表插件",
"version": "0.0.1",
"main": "app/index.js",
"plugins": [
{
"name": "bar",
"export": "bar",
"icon": "app/index.jpg"
}
],
}name: 插件包名称
pluginId: 插件ID, 如果无,则默认为 plugin.json 所在目录的 md5
author: 插件作者
description: 插件描述
version: 插件版本
main: 插件入口文件
plugins: 插件列表,
[ **{ **
**name: 插件的名称 (下拉列表显示的名称), **
**export: 在入口文件中,该插件 export 的变量名称, **
icon: 图标路径,自动压缩为 64x64
}]
当配置 plugin.json 结束之后,可以通过 CLI 运行 arena-plugin-cli dev 即可
npm install arena-plugin-cli -g
- dev 之后没更新: 可能的问题: 1. 9999 端口被占用 2. 插件包名不符合 Android 包名规范
插件的样式可以在 style 目录下新建与 export 配置同名的 scss 样式文件即可自动编译
对于插件,需要首先继承 ArenaPluginDOM, 从 arena-types 包中导入,支持的生命周期如下:
onMounted: 插件的 DOM 已经生成并挂载
onDestroy: 插件即将卸载
propWillUpdate(target: string, oldValue: any, newValue: any): 数据更新,target 表示更新的根级key的名称
如果需要 onMounted 之前的生命周期,可以写入类的 constructor 中
在 this 上可以访问到 $arena 对象,对象中包含
dom: 插件挂载的 DOM 元素
data: 插件的数据
utils.resolveLocalStatic: 解析文件名为绝对路径,如果插件设计导入图片的选项,图片的值一定为文件名,如需要使用该文件,必须通过该函数转换成绝对访问路径。
插件的面板配置需要在 class 上设置一个静态方法 panel
import { ArenaPluginDOM } from 'arena-types'
class Text extends ArenaPluginDOM {}
Text.panel = () => {}配置的最小元素为 Item, 可以由布局 Layout 包含,最后由组 Group 包含,这三个 class 均可以从 arena-types 中导入
例1: 配置一个包含组名为 “文字” 并且有一个内容输入框的面板,并且这个内容可以从 $arena.data.content 中获取到
import { ArenaPluginDOM, Group, Item } from 'arena-types'
class Text extends ArenaPluginDOM {}
Text.panel = () => {
const group = new Group('文字')
const item = new Item('input', 'content')
group.add(item)
return [group]
}例2: 配置一个包含组名为 “文字” 并且有一个内容输入框的面板,并且这个内容可以从 $arena.data.content 中获取到, 在内容的同一行,还有字号选项
import { ArenaPluginDOM, Group, Item, Layout } from 'arena-types'
class Text extends ArenaPluginDOM {}
Text.panel = () => {
const group = new Group('文字')
const textContent = new Item('input', 'content')
const fontSize = new Item('input', 'size')
const layout = new Layout()
// layout 为 12 等分的
layout.add([[textContent, 6], [fontSize, 6])
// 也等同于
// layout.add(textContent, 6)
// layout.add(fontSize, 6)
group.add(layout)
return [group]
}例3: 配置一个包含组名为 “文字” 并且有一个内容输入框的面板,并且这个内容可以从 $arena.data.content 中获取到, 在内容的同一行,还有字号选项,当字号大于 30 时 内容选项消失
import { ArenaPluginDOM, Group, Item, Layout } from 'arena-types'
class Text extends ArenaPluginDOM {}
Text.panel = () => {
const group = new Group('文字')
// Item 的第五个参数为一个函数,传入一个上下文,该上下文是当前所有选项的值
// 如果函数返回 false 该选项隐藏
const textContent = new Item('input', 'content', {}, {}, $ => $.size < 30)
const fontSize = new Item('input', 'size')
const layout = new Layout()
layout.add([[textContent, 6], [fontSize, 6])
group.add(layout)
return [group]
}group包含三种形态
第一种形态为普通的折叠面板
第二种形态为带代码块的折叠面板EditorBoxGroup, 这种形式的Group需要传EditorBoxGroup的第二个参数, 当前折叠面板的名字, 作用是通过这个名字来获取代码块的值. 如下面的折叠面板通过 $arena.data.text 获得折叠面板代码块中的值.
import { ArenaPluginDOM, EditorBoxGroup, Item } from 'arena-types'
class Text extends ArenaPluginDOM {}
Text.panel = () => {
// 在这里定义为代码块的折叠面板, 同时传递一个name为text
const group = new EditorBoxGroup('文字', 'text')
const item = new Item('input', 'content', {}, {
schema: {
type: 'string',
},
},
);
group.add([item])
return [group]
}第三种形态为带tab切换的折叠面板TabBoxGroup, 这种形式的Group需要在给组件传递value的时候传递一个value数组, 数组的长度将设定为tab页的数量. 如下的tab页数量为两个, 每一个tab页有一个文字的input, 第一个tab中的input的值为'文字1', 第二个的值为'文字2'.
import { ArenaPluginDOM, TabBoxGroup, Item } from 'arena-types'
class Text extends ArenaPluginDOM {}
Text.panel = () => {
// 在这里定义为tab页的折叠面板
const group = new TabBoxGroup('文字')
const item = new Item('input', 'content', {}, {
schema: {
type: 'string',
},
},
);
group.add([item])
return [group]
}
Text.presets = {
// 在传递初始值的时候传递一个值的数组
content: ['文字1', '文字2']
}该参数为选项展示类的参数
showLabel, label 在控件下方展示标签
showTitle, title 在控件左方展示标签
第四个参数为给控件传入的参数,可以传入的参数依照控件类型不同而不同,具体请看下一小节
插件的默认配置挂载静态属性 presets 即可
import { ArenaPluginDOM, Group, Item } from 'arena-types'
class Text extends ArenaPluginDOM {}
Text.panel = () => {
const group = new Group('文字')
const item = new Item('input', 'content')
group.add(item)
return [group]
}
Text.prestes = {
content: '请输入内容'
}| 参数 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| unit | String |
单位 | |
| toFixed | Number |
保留小数 | 0 |
| placeholder | String |
输入框占位文本 | |
| schema | Object |
数据校验(必须) | |
| enableDomId | String |
滑块有效区 | inspector |
| readonly | Boolean |
是否只读 | false |
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| rows | 行数 | Number |
1 |
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| display | radio 展示的内容,可选项有 name 和 icon | String |
100 |
| options | 可选列表 | 数组 | name |
| type | radio 类型,目前可选 button | radio | String |
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| multiple | 是否多选 | Boolean |
false |
| options | 可选参数列表 | Array |
- |
| placeholder | 默认提示 | String |
请选择 |
| maxHeight | 下拉选框的最大高度,超出将滚动 | Number |
- |
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| max | 最大值 | Number |
100 |
| min | 最小值 | Number |
0 |
| toFixed | 精确小数位 | Number |
1 |
| key | value | 说明 |
|---|---|---|
| type | String | [必填] 说明目前选中的值类型,从color linear radial conic image选择 |
| color | String | [选填,组合1] 任意颜色类型均可,当该组合1值全部存在时,自动在tab区域增加 color类型面板 |
| gradient-rotate | Number | [选填,组合2] 该旋转将应用在linear和conic上,对渐变角度做出变化。当组合2值全部存在时,自动在tab区域增加linear radial conic类型面板 |
| segments | Array | [选填,组合2] 每个数组选项需要包含以下信息 :1. id:分段唯一标识;2. color:分段颜色; 3. offset: 分段偏移,number类型,取值范围在0-1。要求数组内必须存有2个以上的数据。当组合2值全部存在时,自动在tab区域增加linear radial conic类型面板 |
| url | String | [选填,组合3] 填充图片的URL, 当组合3值全部存在时,自动在tab区域增加image类型面板 |
| fillMethod | String | [选填,组合3] 图片的填充方式,分为fill, fit, repeat, repeat-x, repeat-y, stretch, 当组合3值全部存在时,自动在tab区域增加image类型面板 |
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| disabled | 是否为禁用状态 | Boolean |
false |