feat:优化动作数据域 (#5544)

* feat:优化事件数据域

* feat:优化事件数据域

* feat:优化事件数据域(option->item,options->items)

* feat:优化事件数据域(version)

* feat:优化事件数据域(修复弹窗事件多次触发&并行数据获取问题)

* feat:优化事件数据域(删除多余代码)

* feat:优化事件数据域(更新文档)

* feat:优化事件数据域(更新文档)

* feat:优化动作数据域

* feat:优化动作数据域
This commit is contained in:
hsm-lv 2022-10-12 15:09:03 +08:00 committed by GitHub
parent af69249562
commit 4acfbb99ce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
109 changed files with 1262 additions and 864 deletions

View File

@ -218,11 +218,11 @@ order: 36
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | ---------------- |
| change | `event.data.value: string` 时间值 | 时间值变化时触发 |
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------ | ---------------- |
| change | `value: string` 组件的值 | 时间值变化时触发 |
## 动作表

View File

@ -129,11 +129,11 @@ itemSchema: {
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------------------------------------------------------------------------- | ---------------- |
| change | `event.data.activeIndex: number` 激活图片的索引 <br /> `prevIndex: number` 上一张图片的索引 | 轮播图切换时触发 |
| 事件名称 | 事件参数 | 说明 |
| -------- | -------------------------------------------------------------------------------- | ---------------- |
| change | `activeIndex: number` 激活图片的索引 <br /> `prevIndex: number` 上一张图片的索引 | 轮播图切换时触发 |
## 动作表

View File

@ -865,12 +865,14 @@ feedback 反馈弹框是指,在 ajax 请求后,可以显示一个弹框,
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
| 事件名称 | 事件参数 | 说明 |
| -------- | ----------------------------- | ------------------ |
| confirm | `event.data: object` 弹窗数据 | 点击确认提交时触发 |
| cancel | `event.data: object` 弹窗数据 | 点击取消时触发 |
> `[name]`为当前数据域中的字段名,例如:当前数据域为 {username: 'amis'},则可以通过${username}获取对应的值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------------------------------------------------------ | ------------------ |
| confirm | `event.data: object` 弹窗数据<br/>`[name]: any` 当前数据域中指定字段的值 | 点击确认提交时触发 |
| cancel | `event.data: object` 弹窗数据<br/>`[name]: any` 当前数据域中指定字段的值 | 点击取消时触发 |
## 动作表

View File

@ -304,12 +304,12 @@ order: 43
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
| 事件名称 | 事件参数 | 说明 |
| -------- | ----------------------------- | ------------------ |
| confirm | `event.data: object` 抽屉数据 | 点击确认提交时触发 |
| cancel | `event.data: object` 抽屉数据 | 点击取消时触发 |
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------------------------------------------------------ | ------------------ |
| confirm | `event.data: object` 抽屉数据<br/>`[name]: any` 当前数据域中指定字段的值 | 点击确认提交时触发 |
| cancel | `event.data: object` 抽屉数据<br/>`[name]: any` 当前数据域中指定字段的值 | 点击取消时触发 |
## 动作表

View File

@ -279,12 +279,12 @@ order: 44
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| ---------- | -------- | -------------- |
| mouseenter | - | 鼠标移入时触发 |
| mouseleave | - | 鼠标移出时触发 |
| 事件名称 | 事件参数 | 说明 |
| ---------- | ---------------------------- | --------------------------------------- |
| mouseenter | items: Array<DropdownButton> | 触发方式为 hover 模式下,鼠标移入时触发 |
| mouseleave | items: Array<DropdownButton> | 触发方式为 hover 模式下,鼠标移出时触发 |
## 动作表

View File

@ -165,11 +165,13 @@ order: 6
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | ---------------- |
| change | `event.data.value: string` 选中值 | 选中值变化时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | ---------------- |
| change | `[name]: string` 组件的值 | 选中值变化时触发 |
## 动作表

View File

@ -57,11 +57,13 @@ order: 7
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | ---------------- |
| change | `event.data.value: string` 选中值 | 选中值变化时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | ---------------- |
| change | `[name]: string` 组件的值 | 选中值变化时触发 |
## 动作表

View File

@ -102,11 +102,13 @@ order: 8
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------------------ | ------------------ |
| change | `event.data.value: boolean` 选中状态 | 选中状态变化时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | -------------------------- | ------------------ |
| change | `[name]: boolean` 组件的值 | 选中状态变化时触发 |
## 动作表

View File

@ -442,7 +442,7 @@ order: 9
| 属性名 | 类型 | 默认值 | 说明 |
| --------------- | ----------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------- |
| options | `Array<object>`或`Array<string>` | | [选项组](./options#%E9%9D%99%E6%80%81%E9%80%89%E9%A1%B9%E7%BB%84-options) |
| options | `Array<object>`或`Array<string>` | | [选项组](./#%E9%9D%99%E6%80%81%E9%80%89%E9%A1%B9%E7%BB%84-options) |
| source | `string`或 [API](../../../docs/types/api) | | [动态选项组](./options#%E5%8A%A8%E6%80%81%E9%80%89%E9%A1%B9%E7%BB%84-source) |
| delimiter | `string` | `,` | [拼接符](./options#%E6%8B%BC%E6%8E%A5%E7%AC%A6-delimiter) |
| labelField | `string` | `"label"` | [选项标签字段](./options#%E9%80%89%E9%A1%B9%E6%A0%87%E7%AD%BE%E5%AD%97%E6%AE%B5-labelfield) |
@ -469,11 +469,13 @@ order: 9
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | ---------------- |
| change | `event.data.value: string` 选中值 | 选中值变化时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ----------------------- | ---------------- |
| change | `[name]: string` 选中值 | 选中值变化时触发 |
## 动作表

View File

@ -882,7 +882,7 @@ combo 还有一个作用是增加层级,比如返回的数据是一个深层
| joinValues | `boolean` | `true` | 默认为 `true` 当扁平化开启的时候,是否用分隔符的形式发送给后端,否则采用 array 的方式。 |
| delimiter | `string` | `false` | 当扁平化开启并且 joinValues 为 true 时,用什么分隔符。 |
| addable | `boolean` | `false` | 是否可新增 |
| addattop | `boolean` | `false` | 在顶部添加 |
| addattop | `boolean` | `false` | 在顶部添加 |
| removable | `boolean` | `false` | 是否可删除 |
| deleteApi | [API](../../../docs/types/api) | | 如果配置了,则删除前会发送一个 api请求成功才完成删除 |
| deleteConfirmText | `string` | `"确认要删除?"` | 当配置 `deleteApi` 才生效!删除时用来做用户确认 |
@ -905,13 +905,15 @@ combo 还有一个作用是增加层级,比如返回的数据是一个深层
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| ---------- | ---------------------------------------------------------------------------------------------- | -------------------------------------------- |
| add | `event.data.value: string \| string[]` 当前数据集 | 添加组合项时触发 |
| delete | `event.data.key: number` 移除项的索引<br />`event.data.value: string \| string[]` 现有的数据集 | 删除组合项时触发 |
| tabsChange | `event.data.key: number` 选项卡索引 | 当设置 tabsMode 为 true 时,切换选项卡时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| ---------- | ------------------------------------------------------------------------------------------------ | -------------------------------------------- |
| add | `[name]: object \| object[]` 组件的值 | 添加组合项时触发 |
| delete | `key: number` 移除项的索引<br />`item: object` 移除项<br />`[name]: object \| object[]` 组件的值 | 删除组合项时触发 |
| tabsChange | `key: number` 选项卡索引<br />`item: object` 激活项<br />`[name]: object \| object[]` 组件的值 | 当设置 tabsMode 为 true 时,切换选项卡时触发 |
## 动作表

View File

@ -86,12 +86,15 @@ order: 17
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | ----------------------------------- | ------------------------ |
| focus | `event.data.value: string` 当前代码 | 右侧输入框获取焦点时触发 |
| blur | `event.data.value: string` 当前代码 | 右侧输入框失去焦点时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | ------------------------ |
| change | `[name]: string` 组件的值 | 代码变化时触发 |
| focus | `[name]: string` 组件的值 | 右侧输入框获取焦点时触发 |
| blur | `[name]: string` 组件的值 | 右侧输入框失去焦点时触发 |
## 动作表

View File

@ -167,12 +167,15 @@ amis 的编辑器是基于 monaco 开发的,如果想进行深度定制,比
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | ----------------------------------- | -------------------- |
| focus | `event.data.value: string` 当前代码 | 输入框获取焦点时触发 |
| blur | `event.data.value: string` 当前代码 | 输入框失去焦点时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | -------------------- |
| change | `[name]: string` 组件的值 | 代码变化时触发 |
| focus | `[name]: string` 组件的值 | 输入框获取焦点时触发 |
| blur | `[name]: string` 组件的值 | 输入框失去焦点时触发 |
## 动作表

View File

@ -1301,7 +1301,7 @@ Form 支持轮询初始化接口,步骤如下:
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| --------------------- | ------------------------------------------------------------ | ---------------------------- |

View File

@ -84,11 +84,13 @@ order: 10
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------------------------- | ---------------- |
| change | `event.data.value: number \| string` 选中值 | 选中值变化时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ----------------------------------- | ---------------- |
| change | `[name]: number \| string` 组件的值 | 选中值变化时触发 |
## 动作表

View File

@ -159,13 +159,15 @@ order: 15
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | -------------------------------- |
| change | `event.data.value: string` 时间值 | 时间值变化时触发 |
| focus | `event.data.value: string` 时间值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `event.data.value: string` 时间值 | 输入框失去焦点(非内嵌模式)时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | -------------------------------- |
| change | `[name]: string` 组件的值 | 时间值变化时触发 |
| focus | `[name]: string` 组件的值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `[name]: string` 组件的值 | 输入框失去焦点(非内嵌模式)时触发 |
## 动作表

View File

@ -374,13 +374,15 @@ order: 13
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | -------------------------------- |
| change | `event.data.value: string` 时间值 | 时间值变化时触发 |
| focus | `event.data.value: string` 时间值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `event.data.value: string` 时间值 | 输入框失去焦点(非内嵌模式)时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | -------------------------------- |
| change | `[name]: string` 组件的值 | 时间值变化时触发 |
| focus | `[name]: string` 组件的值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `[name]: string` 组件的值 | 输入框失去焦点(非内嵌模式)时触发 |
## 动作表

View File

@ -81,13 +81,15 @@ order: 16
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | -------------------------------- |
| change | `event.data.value: string` 时间值 | 时间值变化时触发 |
| focus | `event.data.value: string` 时间值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `event.data.value: string` 时间值 | 输入框失去焦点(非内嵌模式)时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | -------------------------------- |
| change | `[name]: string` 组件的值 | 时间值变化时触发 |
| focus | `[name]: string` 组件的值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `[name]: string` 组件的值 | 输入框失去焦点(非内嵌模式)时触发 |
## 动作表

View File

@ -346,13 +346,15 @@ order: 14
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | -------------------------------- |
| change | `event.data.value: string` 时间值 | 时间值变化时触发 |
| focus | `event.data.value: string` 时间值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `event.data.value: string` 时间值 | 输入框失去焦点(非内嵌模式)时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | -------------------------------- |
| change | `[name]: string` 组件的值 | 时间值变化时触发 |
| focus | `[name]: string` 组件的值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `[name]: string` 组件的值 | 输入框失去焦点(非内嵌模式)时触发 |
## 动作表

View File

@ -226,11 +226,13 @@ order: 14
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | ---------------------------------------------------- | ------------------------ |
| change | `event.data.value: Array<object>` excel 解析后的数据 | excel 上传解析完成后触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------------------------------------ | ------------------------ |
| change | `[name]: Array<object>` 组件的值excel 解析后的数据) | excel 上传解析完成后触发 |
## 动作表

View File

@ -340,14 +340,16 @@ order: 21
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------- |
| change | `event.data.file: Array<FileValue>` 上传的文件 | 上传文件值变化时触发(上传失败同样会触发) |
| remove | `event.data.file: FileValue` 被移除的文件 | 移除文件时触发 |
| success | `event.data.file: FileValue` 远程上传请求成功后返回的结果数据 | 上传成功时触发 |
| fail | `event.data.file: FileValue` 上传的文件 <br /> `event.data.error: object` 远程上传请求失败后返回的错误信息 | 上传文件失败时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`file`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- |
| change | `[name]: FileValue` \| `Array<FileValue>` 组件的值 | 上传文件值变化时触发(上传失败同样会触发) |
| remove | `item: FileValue` 被移除的文件<br/>`[name]: FileValue` \| `Array<FileValue>` 组件的值 | 移除文件时触发 |
| success | `item: FileValue` 远程上传请求成功后返回的结果数据<br/>`[name]: FileValue` \| `Array<FileValue>` 组件的值 | 上传成功时触发 |
| fail | `item: FileValue` 上传的文件 <br /> `error: object` 远程上传请求失败后返回的错误信息<br/>`[name]: FileValue` \| `Array<FileValue>` 组件的值 | 上传文件失败时触发 |
### FileValue 属性表

View File

@ -466,14 +466,16 @@ app.listen(8080, function () {});
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------- |
| change | `event.data.file: Array<FileValue>` 上传的文件 | 上传文件值变化时触发(上传失败同样会触发) |
| remove | `event.data.file: FileValue` 被移除的文件 | 移除文件时触发 |
| success | `event.data.file: FileValue` 远程上传请求成功后返回的结果数据 | 上传成功时触发 |
| fail | `event.data.file: FileValue` 上传的文件 <br /> `event.data.error: object` 远程上传请求失败后返回的错误信息 | 上传文件失败时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`file`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- |
| change | `[name]: FileValue` \| `Array<FileValue>` 组件的值 | 上传文件值变化时触发(上传失败同样会触发) |
| remove | `item: FileValue` 被移除的文件<br/>`[name]: FileValue` \| `Array<FileValue>` 组件的值 | 移除文件时触发 |
| success | `item: FileValue` 远程上传请求成功后返回的结果数据<br />`id: string` id<br />`[name]: FileValue` 组件的值 | 上传成功时触发 |
| fail | `item: FileValue` 上传的文件 <br /> `error: object` 远程上传请求失败后返回的错误信息<br/>`[name]: FileValue` \| `Array<FileValue>` 组件的值 | 上传文件失败时触发 |
### FileValue 属性表

View File

@ -124,12 +124,14 @@ key 只能是字符串,因此输入格式是 `input-text`,但 value 格式
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------------------------------------------- | ---------------- |
| add | `event.data.value: string \| string[]` 当前数据集 | 添加组合项时触发 |
| delete | `event.data.key: number` 移除项的索引<br />`value: string` 当前数据集 | 删除组合项时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------------------------------------------------------------------ | ---------------- |
| add | `[name]: string \| string[]` 组件的值 | 添加组合项时触发 |
| delete | `key: number` 移除项的索引<br />`item: string` 移除项<br />`[name]: object` 组件的值 | 删除组合项时触发 |
## 动作表

View File

@ -63,13 +63,15 @@ order: 15
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | -------------------------------- |
| change | `event.data.value: string` 时间值 | 时间值变化时触发 |
| focus | `event.data.value: string` 时间值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `event.data.value: string` 时间值 | 输入框失去焦点(非内嵌模式)时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | -------------------------------- |
| change | `[name]: string` 组件的值 | 时间值变化时触发 |
| focus | `[name]: string` 组件的值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `[name]: string` 组件的值 | 输入框失去焦点(非内嵌模式)时触发 |
## 动作表

View File

@ -156,13 +156,15 @@ order: 81
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | -------------------------------- |
| change | `event.data.value: string` 时间值 | 时间值变化时触发 |
| focus | `event.data.value: string` 时间值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `event.data.value: string` 时间值 | 输入框失去焦点(非内嵌模式)时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | -------------------------------- |
| change | `[name]: string` 组件的值 | 时间值变化时触发 |
| focus | `[name]: string` 组件的值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `[name]: string` 组件的值 | 输入框失去焦点(非内嵌模式)时触发 |
## 动作表

View File

@ -175,13 +175,15 @@ order: 32
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | ---------------- |
| change | `event.data.value: number` 当前值 | 输入值变化时触发 |
| blur | `event.data.value: number` 当前值 | - |
| focus | `event.data.value: number` 当前值 | - |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | ---------------- |
| change | `[name]: number` 组件的值 | 输入值变化时触发 |
| blur | `[name]: number` 组件的值 | - |
| focus | `[name]: number` 组件的值 | - |
## 动作表

View File

@ -62,13 +62,15 @@ order: 15
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | -------------------------------- |
| change | `event.data.value: string` 时间值 | 时间值变化时触发 |
| focus | `event.data.value: string` 时间值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `event.data.value: string` 时间值 | 输入框失去焦点(非内嵌模式)时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | -------------------------------- |
| change | `[name]: string` 组件的值 | 时间值变化时触发 |
| focus | `[name]: string` 组件的值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `[name]: string` 组件的值 | 输入框失去焦点(非内嵌模式)时触发 |
## 动作表

View File

@ -28,13 +28,15 @@ order: 62
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | -------------------------------- |
| change | `event.data.value: string` 时间值 | 时间值变化时触发 |
| focus | `event.data.value: string` 时间值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `event.data.value: string` 时间值 | 输入框失去焦点(非内嵌模式)时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | -------------------------------- |
| change | `[name]: string` 组件的值 | 时间值变化时触发 |
| focus | `[name]: string` 组件的值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `[name]: string` 组件的值 | 输入框失去焦点(非内嵌模式)时触发 |
## 动作表

View File

@ -280,13 +280,15 @@ order: 38
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------------------------------------------------------ | ------------------------------------------------- |
| change | `event.data.value: number \| string \|{min: number, max: number}` 当前值 | 当值变化时触发的事件 |
| blur | `event.data.value: number \| string \|{min: number, max: number}` 当前值 | 当设置 showInput 为 true 时,输入框失去焦点时触发 |
| focus | `event.data.value: number \| string \|{min: number, max: number}` 当前值 | 当设置 showInput 为 true 时,输入框获取焦点时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ---------------------------------------------------------------- | ------------------------------------------------- |
| change | `[name]: number \| string \|{min: number, max: number}` 组件的值 | 当值变化时触发的事件 |
| blur | `[name]: number \| string \|{min: number, max: number}` 组件的值 | 当设置 showInput 为 true 时,输入框失去焦点时触发 |
| focus | `[name]: number \| string \|{min: number, max: number}` 组件的值 | 当设置 showInput 为 true 时,输入框获取焦点时触发 |
## 动作表

View File

@ -162,11 +162,13 @@ order: 37
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | -------------- |
| change | `event.data.value: number` 评分值 | 分值变化时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | -------------- |
| change | `[name]: number` 组件的值 | 分值变化时触发 |
## 动作表

View File

@ -134,13 +134,15 @@ order: 55
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | -------------------- |
| change | `event.data.value: string` 选中值 | 选中值变化时触发 |
| blur | `event.data.value: string` 选中值 | 输入框失去焦点时触发 |
| focus | `event.data.value: string` 选中值 | 输入框获取焦点时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | -------------------------------------------------------------------- | -------------------- |
| change | `[name]: string` 组件的值 | 选中值变化时触发 |
| blur | `[name]: string` 组件的值<br/>`items: object` \| `object[]` 所有选项 | 输入框失去焦点时触发 |
| focus | `[name]: string` 组件的值<br/>`items: object` \| `object[]` 所有选项 | 输入框获取焦点时触发 |
## 动作表

View File

@ -400,15 +400,17 @@ order: 56
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | ---------------------------------------------- |
| click | `event.data.value: string` 输入值 | 点击输入框时触发,只针对选择器模式的输入框有效 |
| enter | `event.data.value: string` 输入值 | 回车时触发,只针对选择器模式的输入框有效 |
| focus | `event.data.value: string` 输入值 | 输入框获取焦点时触发 |
| blur | `event.data.value: string` 输入值 | 输入框失去焦点时触发 |
| change | `event.data.value: string` 输入值 | 值变化时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | ---------------------------------------------- |
| click | `[name]: string` 组件的值 | 点击输入框时触发,只针对选择器模式的输入框有效 |
| enter | `[name]: string` 组件的值 | 回车时触发,只针对选择器模式的输入框有效 |
| focus | `[name]: string` 组件的值 | 输入框获取焦点时触发 |
| blur | `[name]: string` 组件的值 | 输入框失去焦点时触发 |
| change | `[name]: string` 组件的值 | 值变化时触发 |
## 动作表

View File

@ -81,13 +81,15 @@ order: 15
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | -------------------------------- |
| change | `event.data.value: string` 时间值 | 时间值变化时触发 |
| focus | `event.data.value: string` 时间值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `event.data.value: string` 时间值 | 输入框失去焦点(非内嵌模式)时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | -------------------------------- |
| change | `[name]: string` 组件的值 | 时间值变化时触发 |
| focus | `[name]: string` 组件的值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `[name]: string` 组件的值 | 输入框失去焦点(非内嵌模式)时触发 |
## 动作表

View File

@ -255,13 +255,15 @@ order: 58
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | -------------------------------- |
| change | `event.data.value: string` 时间值 | 时间值变化时触发 |
| focus | `event.data.value: string` 时间值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `event.data.value: string` 时间值 | 输入框失去焦点(非内嵌模式)时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | -------------------------------- |
| change | `[name]: string` 组件的值 | 时间值变化时触发 |
| focus | `[name]: string` 组件的值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `[name]: string` 组件的值 | 输入框失去焦点(非内嵌模式)时触发 |
## 动作表

View File

@ -994,24 +994,26 @@ true false true [{label: 'A/B/C', value: 'a/b/c'},{label: 'A
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| ------------ | ------------------------------------------------------------------------------------- | ---------------------------- |
| change | `event.data.value: string` 选中节点的值 | 选中值变化时触发 |
| add | `event.data.options: Option[]` 选项集合<br/>`event.data.value: Option` 新增的节点信息 | 新增节点提交时触发 |
| edit | `event.data.options: Option[]` 选项集合<br/>`event.data.value: Option` 编辑的节点信息 | 编辑节点提交时触发 |
| delete | `event.data.options: Option[]` 选项集合<br/>`event.data.value: Option` 删除的节点信息 | 删除节点提交时触发 |
| loadFinished | `event.data.value: object` deferApi 懒加载远程请求成功后返回的数据 | 懒加载接口远程请求成功时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| ------------ | ----------------------------------------------------------------------------------------------- | ---------------------------- |
| change | `[name]: string` 组件的值 | 选中值变化时触发 |
| add | `items: object[]`选项集合(< 2.3.2 及以下版本 `options`<br/>`[name]: object` 新增的节点信息 | 新增节点提交时触发 |
| edit | `items: object[]`选项集合(< 2.3.2 及以下版本 `options`<br/>`[name]: object` 编辑的节点信息 | 编辑节点提交时触发 |
| delete | `items: object[]`选项集合(< 2.3.2 及以下版本 `options`<br/>`[name]: object` 删除的节点信息 | 删除节点提交时触发 |
| loadFinished | `[name]: object` deferApi 懒加载远程请求成功后返回的数据 | 懒加载接口远程请求成功时触发 |
## 动作表
当前组件对外暴露以下特性动作,其他组件可以通过指定`actionType: 动作名称`、`componentId: 该组件id`来触发这些动作,动作配置可以通过`args: {动作配置项名称: xxx}`来配置具体的参数,详细请查看[事件动作](../../docs/concepts/event-action#触发其他组件的动作)。
| 动作名称 | 动作配置 | 说明 |
| -------- | ------------------------ | ------------------------------------------------------ |
| expand | openLevel: `number` | 展开指定层级 |
| collapse | - | 收起 |
| clear | - | 清空 |
| reset | - | 将值重置为`resetValue`,若没有配置`resetValue`,则清空 |
| setValue | `value: string` 更新的值 | 更新数据,开启`multiple`,多值用`,`分隔 |
| 动作名称 | 动作配置 | 说明 |
| -------- | -------------------------------------- | --------------------------------------------------------------------------------------- |
| expand | openLevel: `number` | 展开指定层级 |
| collapse | - | 收起 |
| clear | - | 清空 |
| reset | - | 将值重置为`resetValue`,若没有配置`resetValue`,则清空 |
| setValue | `value: string` \| `string[]` 更新的值 | 更新数据,开启`multiple`支持设置多项,开启`joinValues`时,多值用`,`分隔,否则多值用数组 |

View File

@ -63,13 +63,15 @@ order: 15
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | -------------------------------- |
| change | `event.data.value: string` 时间值 | 时间值变化时触发 |
| focus | `event.data.value: string` 时间值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `event.data.value: string` 时间值 | 输入框失去焦点(非内嵌模式)时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | -------------------------------- |
| change | `[name]: string` 组件的值 | 时间值变化时触发 |
| focus | `[name]: string` 组件的值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `[name]: string` 组件的值 | 输入框失去焦点(非内嵌模式)时触发 |
## 动作表

View File

@ -28,13 +28,15 @@ order: 61
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | -------------------------------- |
| change | `event.data.value: string` 时间值 | 时间值变化时触发 |
| focus | `event.data.value: string` 时间值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `event.data.value: string` 时间值 | 输入框失去焦点(非内嵌模式)时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | -------------------------------- |
| change | `[name]: string` 组件的值 | 时间值变化时触发 |
| focus | `[name]: string` 组件的值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `[name]: string` 组件的值 | 输入框失去焦点(非内嵌模式)时触发 |
## 动作表

View File

@ -93,19 +93,21 @@ ListSelect 一般用来实现选择,可以单选也可以多选,和 Radio/Ch
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | ---------------- |
| change | `event.data.value: string` 选中值 | 选中值变化时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | ---------------- |
| change | `[name]: string` 组件的值 | 选中值变化时触发 |
## 动作表
当前组件对外暴露以下特性动作,其他组件可以通过指定`actionType: 动作名称`、`componentId: 该组件id`来触发这些动作,动作配置可以通过`args: {动作配置项名称: xxx}`来配置具体的参数,详细请查看[事件动作](../../docs/concepts/event-action#触发其他组件的动作)。
| 动作名称 | 动作配置 | 说明 |
| -------- | ------------------------ | ------------------------------------------------------- |
| clear | - | 清空 |
| reset | - | 将值重置为`resetValue`,若没有配置`resetValue`,则清空 |
| reload | - | 重新加载,调用 `source`,刷新数据域数据刷新(重新加载) |
| setValue | `value: string` 更新的值 | 更新数据,开启`multiple`,多值用`,`分隔 |
| 动作名称 | 动作配置 | 说明 |
| -------- | -------------------------------------- | --------------------------------------------------------------------------------------- |
| clear | - | 清空 |
| reset | - | 将值重置为`resetValue`,若没有配置`resetValue`,则清空 |
| reload | - | 重新加载,调用 `source`,刷新数据域数据刷新(重新加载) |
| setValue | `value: string` \| `string[]` 更新的值 | 更新数据,开启`multiple`支持设置多项,开启`joinValues`时,多值用`,`分隔,否则多值用数组 |

View File

@ -284,11 +284,13 @@ row 模式,每行只能单选某个单元格
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | -------------------------------- | ---------------- |
| change | `event.data.value: Array` 选中值 | 选中值变化时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------ | ---------------- |
| change | `[name]: Array` 组件的值 | 选中值变化时触发 |
## 动作表

View File

@ -618,13 +618,15 @@ order: 31
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | -------------------- |
| change | `event.data.value: string` 选中值 | 选中值变化时触发 |
| blur | `event.data.value: string` 选中值 | 输入框失去焦点时触发 |
| focus | `event.data.value: string` 选中值 | 输入框获取焦点时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | -------------------- |
| change | `[name]: string` 组件的值 | 选中值变化时触发 |
| blur | `[name]: string` 组件的值 | 输入框失去焦点时触发 |
| focus | `[name]: string` 组件的值 | 输入框获取焦点时触发 |
## 动作表

View File

@ -513,9 +513,15 @@ order: 35
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| --------- | ------------------------------------------------------------------ | ---------------- |
| change | `event.data.value: string`<br/> `event.data.option: Option` 选中值 | 选中值变化时触发 |
| itemclick | `event.data.label: string`<br/> `event.data.id: string` | 点击时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------- | ---------------- |
| change | `[name]: string` 组件的值 | 选中值变化时触发 |
| 事件名称 | 事件参数 | 说明 |
| --------- | --------------------------------------------------------------------------------------------------------------------------- | ---------------- |
| change | `[name]: string` 组件的值(多个以逗号分隔)<br/>`selectedItems: object` \| `object[]`选中项(< 2.3.2 及以下版本 `option` | 选中值变化时触发 |
| itemclick | `item: Option` 所点击的选项 | 选项被点击时触发 |

View File

@ -252,11 +252,13 @@ api 返回内容需要包含 options 字段
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | ---------------- |
| change | `event.data.value: string` 选中值 | 选中值变化时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | -------------------------------------------------------------------- | ---------------- |
| change | `[name]: string` 组件的值<br/>`items: object` \| `object[]` 选项集合 | 选中值变化时触发 |
## 动作表

View File

@ -1036,28 +1036,30 @@ leftOptions 动态加载,默认 source 接口是返回 options 部分,而 le
| overflowTagPopover | `TooltipObject` | `{"placement": "top", "trigger": "hover", "showArrow": false, "offset": [0, -10]}` | 收纳浮层的配置属性,详细配置参考[Tooltip](../tooltip#属性表) |
| optionClassName | `string` | | 选项 CSS 类名 |
| popOverContainerSelector | `string` | | 弹层挂载位置选择器,会通过`querySelector`获取 |
| clearable | `boolean` | 是否展示清空图标 |
| clearable | `boolean` | 是否展示清空图标 |
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------------------------------------------------------- | -------------------- |
| change | `event.data.value: string` 选中值 | 选中值变化时触发 |
| blur | `event.data.value: string` 选中值 | 输入框失去焦点时触发 |
| focus | `event.data.value: string` 选中值 | 输入框获取焦点时触发 |
| add | `event.data.options: Option[]` 选项集合<br/>`event.data.value: Option` 新增的选项 | 新增选项提交时触发 |
| edit | `event.data.options: Option[]` 选项集合<br/>`event.data.value: Option` 编辑的选项 | 编辑选项提交时触发 |
| delete | `event.data.options: Option[]` 选项集合<br/>`event.data.value: Option` 删除的选项 | 删除选项提交时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | -------------------------------------------------------------------------------------------- | -------------------- |
| change | `[name]: string` 组件的值<br/>`items: Option[]` 选项集合(< 2.3.2 及以下版本 `options` | 选中值变化时触发 |
| blur | `[name]: string` 组件的值<br/>`items: Option[]` 选项集合(< 2.3.2 及以下版本 `options` | 输入框失去焦点时触发 |
| focus | `[name]: string` 组件的值<br/>`items: Option[]` 选项集合(< 2.3.2 及以下版本 `options` | 输入框获取焦点时触发 |
| add | `[name]: Option` 新增的选项<br/>`items: Option[]` 选项集合(< 2.3.2 及以下版本 `options` | 新增选项提交时触发 |
| edit | `[name]: Option` 编辑的选项<br/>`items: Option[]` 选项集合(< 2.3.2 及以下版本 `options` | 编辑选项提交时触发 |
| delete | `[name]: Option` 删除的选项<br/>`items: Option[]` 选项集合(< 2.3.2 及以下版本 `options` | 删除选项提交时触发 |
## 动作表
当前组件对外暴露以下特性动作,其他组件可以通过指定`actionType: 动作名称`、`componentId: 该组件id`来触发这些动作,动作配置可以通过`args: {动作配置项名称: xxx}`来配置具体的参数,详细请查看[事件动作](../../docs/concepts/event-action#触发其他组件的动作)。
| 动作名称 | 动作配置 | 说明 |
| -------- | ------------------------ | ------------------------------------------------------- |
| clear | - | 清空 |
| reset | - | 将值重置为`resetValue`,若没有配置`resetValue`,则清空 |
| reload | - | 重新加载,调用 `source`,刷新数据域数据刷新(重新加载) |
| setValue | `value: string` 更新的值 | 更新数据,开启`multiple`,多值用`,`分隔 |
| 动作名称 | 动作配置 | 说明 |
| -------- | -------------------------------------- | --------------------------------------------------------------------------------------- |
| clear | - | 清空 |
| reset | - | 将值重置为`resetValue`,若没有配置`resetValue`,则清空 |
| reload | - | 重新加载,调用 `source`,刷新数据域数据刷新(重新加载) |
| setValue | `value: string` \| `string[]` 更新的值 | 更新数据,开启`multiple`支持设置多项,开启`joinValues`时,多值用`,`分隔,否则多值用数组 |

View File

@ -148,11 +148,13 @@ IconSchema 配置
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | -------------------------------------------- | ---------------- |
| change | `event.data.value: string \| boolean` 开关值 | 开关值变化时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------------------ | ---------------- |
| change | `[name]: string \| boolean` 组件的值 | 开关值变化时触发 |
## 动作表

View File

@ -152,20 +152,22 @@ icon:
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | ------------------------- |
| change | `event.data.value: string` 选中值 | picker 弹窗确认提交时触发 |
| focus | - | 获取焦点(非内嵌模式) |
| blur | - | 失去焦点(非内嵌模式) |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | -------------------------------------------------------- | ------------------------- |
| change | `[name]: string` 组件的值<br/>`items: object[]` 选项集合 | picker 弹窗确认提交时触发 |
| focus | `[name]: string` 组件的值 | 获取焦点(非内嵌模式) |
| blur | `[name]: string` 组件的值 | 失去焦点(非内嵌模式) |
## 动作表
当前组件对外暴露以下特性动作,其他组件可以通过指定`actionType: 动作名称`、`componentId: 该组件id`来触发这些动作,动作配置可以通过`args: {动作配置项名称: xxx}`来配置具体的参数,详细请查看[事件动作](../../docs/concepts/event-action#触发其他组件的动作)。
| 动作名称 | 动作配置 | 说明 |
| -------- | ------------------------ | ------------------------------------------------------ |
| clear | - | 清空 |
| reset | - | 将值重置为`resetValue`,若没有配置`resetValue`,则清空 |
| setValue | `value: string` 更新的值 | 更新数据,多值用`,`分隔 |
| 动作名称 | 动作配置 | 说明 |
| -------- | -------------------------------------- | --------------------------------------------------------------------------------------- |
| clear | - | 清空 |
| reset | - | 将值重置为`resetValue`,若没有配置`resetValue`,则清空 |
| setValue | `value: string` \| `string[]` 更新的值 | 更新数据,开启`multiple`支持设置多项,开启`joinValues`时,多值用`,`分隔,否则多值用数组 |

View File

@ -369,21 +369,23 @@ icon:
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| ---------- | --------------------------------------------- | ---------------- |
| change | `event.data.value: string` 选中值 | 选中值变化时触发 |
| tab-change | `event.data.key: number` 当前激活的选项卡索引 | 选项卡切换时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| ---------- | -------------------------------------------------------- | ---------------- |
| change | `[name]: string` 组件的值<br/>`items: Option[]` 选项集合 | 选中值变化时触发 |
| tab-change | `key: number` 当前激活的选项卡索引 | 选项卡切换时触发 |
## 动作表
当前组件对外暴露以下特性动作,其他组件可以通过指定`actionType: 动作名称`、`componentId: 该组件id`来触发这些动作,动作配置可以通过`args: {动作配置项名称: xxx}`来配置具体的参数,详细请查看[事件动作](../../docs/concepts/event-action#触发其他组件的动作)。
| 动作名称 | 动作配置 | 说明 |
| ------------ | ------------------------------ | ------------------------------------------------------ |
| clear | - | 清空 |
| reset | - | 将值重置为`resetValue`,若没有配置`resetValue`,则清空 |
| selectAll | - | 全选 |
| changeTabKey | `activeKey: number` 选中的 Tab | 修改当前选中 tab来选择其他选项 |
| setValue | `value: string` 更新的值 | 更新数据,多值用`,`分隔 |
| 动作名称 | 动作配置 | 说明 |
| ------------ | -------------------------------------- | --------------------------------------------------------------------------------------- |
| clear | - | 清空 |
| reset | - | 将值重置为`resetValue`,若没有配置`resetValue`,则清空 |
| selectAll | - | 全选 |
| changeTabKey | `activeKey: number` 选中的 Tab | 修改当前选中 tab来选择其他选项 |
| setValue | `value: string` \| `string[]` 更新的值 | 更新数据,开启`multiple`支持设置多项,开启`joinValues`时,多值用`,`分隔,否则多值用数组 |

View File

@ -107,13 +107,15 @@ order: 57
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | ---------------------------------- | -------------------- |
| change | `event.data.value: string` 输入值 | 值变化时触发 |
| focus | `event.data.value: string` 输入值 | 输入框获取焦点时触发 |
| blur | `event.data.value: string ` 输入值 | 输入框失去焦点时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | -------------------------- | -------------------- |
| change | `[name]: string` 组件的值 | 值变化时触发 |
| focus | `[name]: string` 组件的值 | 输入框获取焦点时触发 |
| blur | `[name]: string ` 组件的值 | 输入框失去焦点时触发 |
## 动作表

View File

@ -122,20 +122,22 @@ icon:
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | -------------------------------- |
| change | `event.data.value: string` 选中值 | picker 弹窗确认提交时触发 |
| focus | - | 输入框获取焦点(非内嵌模式)时触发 |
| blur | - | 输入框失去焦点(非内嵌模式)时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------------------------------------------------------------- | -------------------------------- |
| change | `[name]: string` 组件的值<br/>`items: object[]`选中项(< 2.3.2 及以下版本 `options` | picker 弹窗确认提交时触发 |
| focus | `[name]: string` 组件的值 | 输入框获取焦点(非内嵌模式)时触发 |
| blur | `[name]: string` 组件的值 | 输入框失去焦点(非内嵌模式)时触发 |
## 动作表
当前组件对外暴露以下特性动作,其他组件可以通过指定`actionType: 动作名称`、`componentId: 该组件id`来触发这些动作,动作配置可以通过`args: {动作配置项名称: xxx}`来配置具体的参数,详细请查看[事件动作](../../docs/concepts/event-action#触发其他组件的动作)。
| 动作名称 | 动作配置 | 说明 |
| -------- | ------------------------ | ------------------------------------------------------ |
| clear | - | 清空 |
| reset | - | 将值重置为`resetValue`,若没有配置`resetValue`,则清空 |
| setValue | `value: string` 更新的值 | 更新数据,多值用`,`分隔 |
| 动作名称 | 动作配置 | 说明 |
| -------- | -------------------------------------- | --------------------------------------------------------------------------------------- |
| clear | - | 清空 |
| reset | - | 将值重置为`resetValue`,若没有配置`resetValue`,则清空 |
| setValue | `value: string` \| `string[]` 更新的值 | 更新数据,开启`multiple`支持设置多项,开启`joinValues`时,多值用`,`分隔,否则多值用数组 |

View File

@ -846,20 +846,22 @@ icon:
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | --------------------------------- | ---------------- |
| change | `event.data.value: string` 选中值 | 选中值变化时触发 |
| selectAll | `event.data.options: Array<Options>` | 全选时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| --------- | --------------------------------------------------------------------------------------- | ---------------- |
| change | `[name]: string` 组件的值<br/>`items: object[]`选中项(< 2.3.2 及以下版本 `options` | 选中值变化时触发 |
| selectAll | `items: object[]`选项集合(< 2.3.2 及以下版本 `options` | 全选时触发 |
## 动作表
当前组件对外暴露以下特性动作,其他组件可以通过指定`actionType: 动作名称`、`componentId: 该组件id`来触发这些动作,动作配置可以通过`args: {动作配置项名称: xxx}`来配置具体的参数,详细请查看[事件动作](../../docs/concepts/event-action#触发其他组件的动作)。
| 动作名称 | 动作配置 | 说明 |
| --------- | ------------------------ | ------------------------------------------------------ |
| clear | - | 清空 |
| reset | - | 将值重置为`resetValue`,若没有配置`resetValue`,则清空 |
| selectAll | - | 全选 |
| setValue | `value: string` 更新的值 | 更新数据,多值用`,`分隔 |
| 动作名称 | 动作配置 | 说明 |
| --------- | -------------------------------------- | --------------------------------------------------------------------------------------- |
| clear | - | 清空 |
| reset | - | 将值重置为`resetValue`,若没有配置`resetValue`,则清空 |
| selectAll | - | 全选 |
| setValue | `value: string` \| `string[]` 更新的值 | 更新数据,开启`multiple`支持设置多项,开启`joinValues`时,多值用`,`分隔,否则多值用数组 |

View File

@ -311,24 +311,26 @@ order: 60
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| ------------ | ------------------------------------------------------------------------------------- | ---------------------------- |
| change | `event.data.value: string` 选中节点的值 | 选中值变化时触发 |
| add | `event.data.options: Option[]` 选项集合<br/>`event.data.value: Option` 新增的节点信息 | 新增节点提交时触发 |
| edit | `event.data.options: Option[]` 选项集合<br/>`event.data.value: Option` 编辑的节点信息 | 编辑节点提交时触发 |
| delete | `event.data.options: Option[]` 选项集合<br/>`event.data.value: Option` 编辑的节点信息 | 编辑节点提交时触发 |
| loadFinished | `event.data.value: object` deferApi 懒加载远程请求成功后返回的数据 | 懒加载接口远程请求成功时触发 |
| blur | `event.data.value: string` 选中值 | 输入框失去焦点时触发 |
| focus | `event.data.value: string` 选中值 | 输入框获取焦点时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| ------------ | ------------------------------------------------------------------------------------------------ | ---------------------------- |
| change | `[name]: string` 组件的值 | 选中值变化时触发 |
| blur | `[name]: string` 组件的值 | 输入框失去焦点时触发 |
| focus | `[name]: string` 组件的值 | 输入框获取焦点时触发 |
| add | `[name]: object` 新增的节点信息<br/>``items: object[]`选项集合(< 2.3.2 及以下版本 `options` | 新增节点提交时触发 |
| edit | `[name]: object` 编辑的节点信息<br/>``items: object[]`选项集合(< 2.3.2 及以下版本 `options` | 编辑节点提交时触发 |
| delete | `[name]: object` 编辑的节点信息<br/>``items: object[]`选项集合(< 2.3.2 及以下版本 `options` | 编辑节点提交时触发 |
| loadFinished | `[name]: object` deferApi 懒加载远程请求成功后返回的数据 | 懒加载接口远程请求成功时触发 |
## 动作表
当前组件对外暴露以下特性动作,其他组件可以通过指定`actionType: 动作名称`、`componentId: 该组件id`来触发这些动作,动作配置可以通过`args: {动作配置项名称: xxx}`来配置具体的参数,详细请查看[事件动作](../../docs/concepts/event-action#触发其他组件的动作)。
| 动作名称 | 动作配置 | 说明 |
| -------- | ------------------------ | ------------------------------------------------------ |
| clear | - | 清空 |
| reset | - | 将值重置为`resetValue`,若没有配置`resetValue`,则清空 |
| setValue | `value: string` 更新的值 | 更新数据,开启`multiple`,多值用`,`分隔 |
| 动作名称 | 动作配置 | 说明 |
| -------- | -------------------------------------- | --------------------------------------------------------------------------------------- |
| clear | - | 清空 |
| reset | - | 将值重置为`resetValue`,若没有配置`resetValue`,则清空 |
| setValue | `value: string` \| `string[]` 更新的值 | 更新数据,开启`multiple`支持设置多项,开启`joinValues`时,多值用`,`分隔,否则多值用数组 |

View File

@ -282,12 +282,14 @@ Page 默认将页面分为几个区域,分别是**内容区(`body`**、**
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
| 事件名称 | 事件参数 | 说明 |
| ----------- | --------------------------------------------- | ---------------------------------------------- |
| inited | `event.data` initApi 远程请求返回的初始化数据 | 远程初始化接口请求成功时触发 |
| pullRefresh | - | 开启下拉刷新后,下拉释放后触发(仅用于移动端) |
> `[name]`为当前数据域中的字段名,例如:当前数据域为 {username: 'amis'},则可以通过${username}获取对应的值。
| 事件名称 | 事件参数 | 说明 |
| ----------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------- |
| inited | `event.data` initApi 远程请求返回的初始化数据<br/>`[name]: any` 当前数据域中指定字段的值 | 远程初始化接口请求成功时触发 |
| pullRefresh | - | 开启下拉刷新后,下拉释放后触发(仅用于移动端) |
## 动作表

View File

@ -699,12 +699,14 @@ ws.on('connection', function connection(ws) {
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
| 事件名称 | 事件参数 | 说明 |
| ----------------- | --------------------------------------------- | ---------------------------------- |
| fetchInited | `event.data` api 远程请求返回的初始化数据 | 远程初始化接口请求成功时触发 |
| fetchSchemaInited | `event.data` schemaApi 远程请求返回的 UI 内容 | 远程 schemaApi UI 内容接口请求成功 |
> `[name]`为当前数据域中的字段名,例如:当前数据域为 {username: 'amis'},则可以通过${username}获取对应的值。
| 事件名称 | 事件参数 | 说明 |
| ----------------- | ---------------------------------------------------------------------------------------- | ---------------------------------- |
| fetchInited | `event.data` api 远程请求返回的初始化数据<br/>`[name]: any` 当前数据域中指定字段的值 | 远程初始化接口请求成功时触发 |
| fetchSchemaInited | `event.data` schemaApi 远程请求返回的 UI 内容<br/>`[name]: any` 当前数据域中指定字段的值 | 远程 schemaApi UI 内容接口请求成功 |
## 动作表

View File

@ -658,11 +658,13 @@ order: 68
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据(`< 2.3.2 及以下版本 ${event.data.[事件参数名]}`详细请查看[事件动作](../../docs/concepts/event-action)
| 事件名称 | 事件参数 | 说明 |
| -------- | ----------------------------------------------- | ---------------- |
| change | `event.data.value: number \| string` 选项卡索引 | 切换选项卡时触发 |
> `[name]`表示当前组件绑定的名称,即`name`属性,如果没有配置`name`属性,则通过`value`取值。
| 事件名称 | 事件参数 | 说明 |
| -------- | ------------------------------------- | ---------------- |
| change | `[name]: number \| string` 选项卡索引 | 切换选项卡时触发 |
## 动作表

View File

@ -15,7 +15,7 @@ order: 73
```schema: scope="body"
{
"type": "wizard",
"api": "/api/mock2/form/saveForm?waitSeconds=2",
"initApi": "/api/mock2/form/saveForm?waitSeconds=2",
"mode": "vertical",
"steps": [
{
@ -96,18 +96,20 @@ order: 73
## 事件表
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`event.data.xxx`事件参数变量来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
当前组件会对外派发以下事件,可以通过`onEvent`来监听这些事件,并通过`actions`来配置执行的动作,在`actions`中可以通过`${事件参数名}`来获取事件产生的数据,详细请查看[事件动作](../../docs/concepts/event-action)。
| 事件名称 | 事件参数 | 说明 |
| -------------- | -------------------------------------------------------------------- | ---------------------------- |
| inited | `event.data: object` initApi 远程请求返回的初始化数据 | 远程初始化接口请求成功时触发 |
| stepChange | `event.data.step: number` 步骤索引 | 切换步骤时触发 |
| change | `event.data: object` 当前表单数据 | 表单值变化时触发 |
| stepSubmitSucc | - | 单个步骤提交成功 |
| stepSubmitFail | `event.data.error: object` 单个步骤 api 远程请求失败后返回的错误信息 | 单个步骤提交失败 |
| finished | `event.data: object` 即将提交的表单数据 | 最终提交时触发 |
| submitSucc | `event.data.result: object` api 远程请求成功后返回的结果数据 | 最终提交成功时触发 |
| submitFail | `event.data.error: object` api 远程请求失败后返回的错误信息 | 最终提交失败时触发 |
> `[name]`为当前数据域中的字段名,例如:当前数据域为 {username: 'amis'},则可以通过${username}获取对应的值。
| 事件名称 | 事件参数 | 说明 |
| -------------- | ------------------------------------------------------------------------------------------------ | ---------------------------- |
| inited | `event.data: object` initApi 远程请求返回的初始化数据<br/>`[name]: any` 当前数据域中指定字段的值 | 远程初始化接口请求成功时触发 |
| stepChange | `step: number` 步骤索引 | 切换步骤时触发 |
| change | `event.data: object` 当前表单数据<br/>`[name]: any` 当前数据域中指定字段的值 | 表单值变化时触发 |
| stepSubmitSucc | - | 单个步骤提交成功 |
| stepSubmitFail | `error: object` 单个步骤 api 远程请求失败后返回的错误信息 | 单个步骤提交失败 |
| finished | `event.data: object` 即将提交的表单数据<br/>`[name]: any` 当前数据域中指定字段的值 | 最终提交时触发 |
| submitSucc | `result: object` api 远程请求成功后返回的结果数据 | 最终提交成功时触发 |
| submitFail | `error: object` api 远程请求失败后返回的错误信息 | 最终提交失败时触发 |
## 动作表

View File

@ -97,10 +97,20 @@ order: 9
通过配置`actionType: 'ajax'`和`api`实现 http 请求发送,该动作需实现 `env.fetcher` 请求器。
- 请求结果缓存在`event.data.responseResult`或`event.data.{{outputVar}}`。
- 请求结果的状态、数据、消息分别默认缓存在:`event.data.{{outputVar}}.responseStatus`、`event.data.{{outputVar}}.responseData`、`event.data.{{outputVar}}.responseMsg`。
请求响应结果缓存在`responseResult`或`{outputVar}``< 2.3.2 及以下版本 event.data.responseResult``event.data.{outputVar}`请求响应结果的结构如下
< 2.0.3 及以下版本请求返回数据默认缓存在 `event.data`。`outputVar` 配置用于解决串行或者并行发送多个 http 请求的场景
```json
{
// 状态码
"responseStatus": 0,
// 响应数据
"responseData": {
"xxx": "xxx"
},
// 响应消息
"responseMsg": "ok"
}
```
```schema
{
@ -134,9 +144,9 @@ order: 9
},
{
actionType: 'toast',
expression: '${event.data.responseResult.responseStatus === 0}',
expression: '${responseResult.responseStatus === 0}',
args: {
msg: '${event.data|json}'
msg: '${responseResult|json}'
}
}
]
@ -172,9 +182,9 @@ order: 9
},
{
actionType: 'toast',
expression: '${event.data.responseResult.responseStatus === 0}',
expression: '${responseResult.responseStatus === 0}',
args: {
msg: '${event.data|json}'
msg: '${responseResult|json}'
}
}
]
@ -187,12 +197,13 @@ order: 9
**动作属性**
| 属性名 | 类型 | 默认值 | 说明 |
| ------------- | ----------------------------------- | ------ | ----------------------------------------------------------- |
| actionType | `string` | `ajax` | ajax 请求 |
| args.api | [API](../../../docs/types/api) | - | 接口配置,`< 1.8.0 及以下版本 api` |
| args.options | `object` | - | 其他配置,`< 1.8.0 及以下版本 options` |
| args.messages | `{success: string, failed: string}` | - | 请求成功/失败后的提示信息,`< 1.8.0 及以下版本 messages` |
| 属性名 | 类型 | 默认值 | 说明 |
| ------------- | ----------------------------------- | ------ | ---------------------------------------------------------------------------------- |
| actionType | `string` | `ajax` | ajax 请求 |
| args.api | [API](../../../docs/types/api) | - | 接口配置,`< 1.8.0 及以下版本 api` |
| args.options | `object` | - | 其他配置,`< 1.8.0 及以下版本 options` |
| args.messages | `{success: string, failed: string}` | - | 请求成功/失败后的提示信息,`< 1.8.0 及以下版本 messages` |
| outputVar | `string` | - | 输出数据变量名,用于存储请求响应结果,用于解决串行或者并行发送多个 http 请求的场景 |
### 打开弹窗(模态)
@ -275,9 +286,9 @@ order: 9
**动作属性**
| 属性名 | 类型 | 默认值 | 说明 |
| ---------- | ----------------------- | -------- | ------------------------------------------ |
| actionType | `string` | `dialog` | 点击后显示一个弹出框 |
| 属性名 | 类型 | 默认值 | 说明 |
| ---------- | ----------------------- | -------- | --------------------------------------------------------- |
| actionType | `string` | `dialog` | 点击后显示一个弹出框 |
| dialog | `string`/`DialogObject` | - | 指定弹框内容,格式可参考[Dialog](../../components/dialog) |
### 关闭弹窗(模态)
@ -430,9 +441,9 @@ order: 9
**动作属性**
| 属性名 | 类型 | 默认值 | 说明 |
| ---------- | ----------------------- | -------- | ------------------------------------------ |
| actionType | `string` | `drawer` | 点击后显示一个侧边栏 |
| 属性名 | 类型 | 默认值 | 说明 |
| ---------- | ----------------------- | -------- | --------------------------------------------------------- |
| actionType | `string` | `drawer` | 点击后显示一个侧边栏 |
| drawer | `string`/`DrawerObject` | - | 指定弹框内容,格式可参考[Drawer](../../components/drawer) |
### 关闭抽屉(模态)
@ -1367,7 +1378,7 @@ order: 9
更新数据即更新指定组件数据域中的数据data通过配置`actionType: 'setValue'`实现组件`数据域变量更新`,通过它可以实现`组件间联动更新`、`数据回填`,支持`基础类型`、`对象类型`、`数组类型`,数据类型取决于目标组件所需数据值类型,仅支持`form`、`dialog`、`drawer`、`wizard`、`service`、`page`、`app`、`chart`,以及数据`输入类`组件。更多示例请查看[更新数据示例](../../../examples/action/setdata/form)。
> 注意:虽然更新数据可以实现对组件数据域的更新,但如果更新数据动作的数据值来自前面的异步动作(例如 发送 http 请求、自定义 JS异步则后面的动作只能通过事件变量`${event.data.xxx}`来获取异步动作产生的数据,无法通过当前数据域`${xxx}`直接获取更新后的数据。
> 注意:< 2.3.2 及以下版本虽然更新数据可以实现对组件数据域的更新但如果更新数据动作的数据值来自前面的异步动作例如 发送 http 请求自定义 JS异步则后面的动作只能通过事件变量`${event.data.xxx}`来获取异步动作产生的数据无法通过当前数据域`${xxx}`直接获取更新后的数据
```schema
{
@ -1444,7 +1455,7 @@ order: 9
- context渲染器上下文
- doAction() 动作执行方法,用于调用任何 actionType 指定的动作
- event事件对象可以获取事件上下文,以及可以调用 setData()、stopPropagation()、preventDefault()分别实现事件上下文设置、动作干预、事件干预
- event事件对象可以调用 setData()、stopPropagation()、preventDefault()分别实现事件上下文设置、动作干预、事件干预,可以通过 event.data 获取事件上下文
```schema
{
@ -1507,7 +1518,7 @@ order: 9
{
"componentId": "u:e47e2c8e6be8",
"args": {
"value": "${event.data.pId}"
"value": "${pId}"
},
"actionType": "setValue"
},
@ -1563,7 +1574,7 @@ order: 9
{
"componentId": "u:e47e2c8e6be7",
"args": {
"value": "${event.data.pId}"
"value": "${pId}"
},
"actionType": "setValue"
},
@ -1711,7 +1722,7 @@ order: 9
{
actionType: 'reload',
args: {
myname: '${event.data.value}', // 从事件数据中取
myname: '${myrole}', // 从事件数据中取
}
},
{
@ -1753,8 +1764,8 @@ order: 9
{
actionType: 'reload',
args: {
myrole: '${event.data.value}',
age: '${event.data.age}'
myrole: '${myrole}',
age: '${age}'
}
},
{
@ -1791,7 +1802,7 @@ order: 9
{
actionType: 'reload',
args: {
job: '${event.data.value}'
job: '${myrole}'
}
},
{
@ -2294,6 +2305,10 @@ registerAction('my-action', new MyAction());
body: {
type: 'form',
wrapWithPanel: false,
data: {
name: 'lvxj',
age: 'kkkk'
},
body: [
{
type: 'button',
@ -2332,13 +2347,27 @@ registerAction('my-action', new MyAction());
}
},
outputVar: 'var2'
},
{
actionType: 'ajax',
args: {
api: {
url: 'https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/mock2/form/saveForm?name=${name}',
method: 'get'
},
messages: {
success: '请求3成功了欧耶',
failed: '失败了呢。。'
}
},
outputVar: 'var3'
}
]
},
{
actionType: 'toast',
args: {
msg: 'var1:${event.data.var1|json}, var2:${event.data.var2|json}'
msg: 'var1:${var1|json}, var2:${var2|json}, var3:${var3|json}'
}
}
]
@ -2359,7 +2388,7 @@ registerAction('my-action', new MyAction());
# 动作间数据传递
从事件触发开始,整个数据流包含事件本身产生的事件数据和动作产生的动作数据,事件源头产生的数据在 AMIS 事件动作机制底层已经自动加入渲染器数据域,可以通过`event.data.xxx`直接获取,而部分动作产生的数据如何流动需要交互设计者进行介入,对于数据流动可以通过数据映射,将上一个动作产生的数据作为动作参数写入下一个动作。
从事件触发开始,整个数据流包含事件本身产生的事件数据和动作产生的动作数据,事件源头产生的数据在 AMIS 事件动作机制底层已经自动加入渲染器数据域,可以通过`xxx`直接获取(`< 2.3.2 及以下版本 event.data.xxx`而部分动作产生的数据如何流动需要交互设计者进行介入对于数据流动可以通过数据映射将上一个动作产生的数据作为动作参数写入下一个动作
**传递数据**
@ -2416,7 +2445,8 @@ registerAction('my-action', new MyAction());
{
actionType: 'reload',
args: {
age: '${event.data.age}'
age: '${age}',
name: '${name}'
}
}
]
@ -2429,7 +2459,9 @@ registerAction('my-action', new MyAction());
**引用 http 请求动作返回的数据**
http 请求动作执行结束后,后面的动作可以通过 `event.data.responseResult.responseStatus`或`event.data.{{outputVar}}.responseStatus`、`event.data.responseResult.responseData`或`event.data.{{outputVar}}.responseData`、`event.data.responseResult.responseMsg`或`event.data.{{outputVar}}.responseMsg`来获取请求结果的状态、数据、消息。
http 请求动作执行结束后,后面的动作可以通过 `${responseResult}`或`${{outputVar}}`来获取请求响应结果,响应结果的结构定义参考[发送 http 请求](../../docs/concepts/event-action#发送-http-请求)。
> `< 2.3.2 及以下版本 需要通过 ${event.data.{xxx}}`来获取以上信息,例如:${event.data.responseResult}
```schema
{
@ -2451,7 +2483,7 @@ http 请求动作执行结束后,后面的动作可以通过 `event.data.respo
{
actionType: 'dialog',
args: {
id: '${event.data.responseResult.responseData.id}'
id: '${responseResult.responseData.id}'
},
dialog: {
type: 'dialog',
@ -2531,7 +2563,7 @@ http 请求动作执行结束后,后面的动作可以通过 `event.data.respo
args: {
msg: '不关闭'
},
preventDefault: 'event.data.command === "Do not close"'
preventDefault: 'command === "Do not close"'
}
]
}

View File

@ -84,7 +84,7 @@ export default {
{
actionType: 'toast',
args: {
msg: '滚动至${event.data.activeIndex}'
msg: '滚动至${activeIndex}'
}
}
]

View File

@ -3,7 +3,7 @@ const changeEvent = {
{
actionType: 'dialog',
args: {
val: '${event.data.value}'
val: '${file}'
},
dialog: {
title: `派发change事件`,

View File

@ -135,7 +135,7 @@ export default {
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发change事件${event.data.value}'
msg: '派发change事件${tree}'
}
}
]
@ -146,7 +146,14 @@ export default {
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发add事件${event.data|json}'
msg: '派发add事件${tree|json}'
}
},
{
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发add事件${items|json}'
}
}
]
@ -157,7 +164,14 @@ export default {
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发edit事件${event.data|json}'
msg: '派发edit事件${tree|json}'
}
},
{
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发edit事件${items|json}'
}
}
]
@ -168,7 +182,14 @@ export default {
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发delete事件${event.data|json}'
msg: '派发delete事件${tree|json}'
}
},
{
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发delete事件${items|json}'
}
}
]
@ -179,7 +200,7 @@ export default {
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发loadFinished事件${event.data.value|json}'
msg: '派发loadFinished事件${tree|json}'
}
}
]

View File

@ -1,14 +1,14 @@
const change = {
const change = name => ({
actions: [
{
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发change事件${event.data.value|json}'
msg: `派发change事件\${${name}|json\}`
}
}
]
};
});
const add = {
actions: [
@ -16,7 +16,7 @@ const add = {
actionType: 'toast',
args: {
msgType: 'info',
msg: '${event.data|json}'
msg: 'clear-select: ${clear-select|json},items: ${items|json}'
}
}
]
@ -28,7 +28,7 @@ const edit = {
actionType: 'toast',
args: {
msgType: 'info',
msg: '${event.data|json}'
msg: 'clear-select: ${clear-select|json},items: ${items|json}'
}
}
]
@ -40,7 +40,7 @@ const del = {
actionType: 'toast',
args: {
msgType: 'info',
msg: '${event.data|json}'
msg: 'clear-select: ${clear-select|json},items: ${items|json}'
}
}
]
@ -135,7 +135,7 @@ export default {
removable: true,
options,
onEvent: {
change,
change: change('clear-select'),
blur,
focus,
add,
@ -188,7 +188,7 @@ export default {
multiple: true,
options,
onEvent: {
change,
change: change('clear-input-tag'),
blur,
focus
}
@ -250,7 +250,7 @@ export default {
}
],
onEvent: {
change
change: change('clear-matrix-checkboxes')
}
}
]
@ -294,7 +294,7 @@ export default {
type: 'radios',
options,
onEvent: {
change
change: change('clear-radios')
}
}
]
@ -365,7 +365,7 @@ export default {
joinValues: true,
delimiter: '。',
onEvent: {
change,
change: change('clear-nested-select'),
blur,
focus
}
@ -415,7 +415,7 @@ export default {
'/api/mock2/options/chainedOptions?waitSeconds=1&parentId=$parentId&level=$level&maxLevel=4',
value: 'a,b',
onEvent: {
change,
change: change('clear-chained-select'),
blur,
focus
}
@ -462,7 +462,7 @@ export default {
label: 'clear动作测试',
mode: 'row',
onEvent: {
change
change: change('clear-input-city')
}
}
]
@ -508,7 +508,7 @@ export default {
mode: 'row',
option: '勾选框',
onEvent: {
change
change: change('clear-checkbox')
}
}
]
@ -543,7 +543,7 @@ export default {
label: 'clear动作测试',
options,
onEvent: {
change
change: change('clear-checkboxes')
}
}
]
@ -590,7 +590,7 @@ export default {
type: 'button-group-select',
options,
onEvent: {
change
change: change('clear-options_001')
}
}
]
@ -624,7 +624,7 @@ export default {
type: 'list-select',
options,
onEvent: {
change
change: change('clear-options_002')
}
}
]

View File

@ -39,7 +39,7 @@ export default {
actionType: 'toast',
args: {
msgType: 'success',
msg: 'API inited: <b>${event.data.date}</b>'
msg: 'API inited: <b>${date}</b>'
}
}
]
@ -77,7 +77,7 @@ export default {
actionType: 'toast',
args: {
msgType: 'info',
msg: 'SchemaAPI inited: <b>title: ${event.data.title}</b>'
msg: 'SchemaAPI inited: <b>title: ${title}</b>'
}
}
]

View File

@ -47,7 +47,7 @@ export default {
actionType: 'toast',
args: {
msgType: 'info',
msg: '选中${event.data.selectedItems.length}项数据;未选中${event.data.unSelectedItems.length}项数据'
msg: '选中${selectedItems.length}项数据;未选中${unSelectedItems.length}项数据'
}
}
]
@ -80,10 +80,7 @@ export default {
name: 'browser',
label: 'Browser',
filterable: {
options: [
'Internet Explorer 4.0',
'Internet Explorer 5.0'
]
options: ['Internet Explorer 4.0', 'Internet Explorer 5.0']
}
},
@ -100,7 +97,7 @@ export default {
actionType: 'toast',
args: {
msgType: 'info',
msg: '列排序数据:${event.data|json}'
msg: 'orderBy${orderBy},orderDir${orderDir}'
}
}
]
@ -111,7 +108,7 @@ export default {
actionType: 'toast',
args: {
msgType: 'info',
msg: '列筛选数据:${event.data|json}'
msg: 'filterName${filterName},filterValue${filterValue}'
}
}
]
@ -122,7 +119,7 @@ export default {
actionType: 'toast',
args: {
msgType: 'info',
msg: '列搜索数据:${event.data|json}'
msg: 'searchName${searchName},searchValue${searchValue|json}'
}
}
]
@ -168,7 +165,7 @@ export default {
actionType: 'toast',
args: {
msgType: 'info',
msg: '${event.data.movedItems.length}行发生移动'
msg: '${movedItems.length}行发生移动'
}
}
]
@ -214,7 +211,7 @@ export default {
actionType: 'toast',
args: {
msgType: 'info',
msg: '当前显示${event.data.columns.length}列'
msg: '当前显示${columns.length}列'
}
}
]
@ -259,7 +256,7 @@ export default {
actionType: 'toast',
args: {
msgType: 'info',
msg: '行单击数据:${event.data|json}'
msg: '行单击数据:${rowItem|json}'
}
}
]

View File

@ -92,7 +92,7 @@ export default {
actionType: 'toast',
args: {
msgType: 'info',
msg: '切换至选项卡${event.data.value}'
msg: '切换至选项卡${tabs-change-receiver}'
}
}
]

View File

@ -94,7 +94,7 @@ export default {
actionType: 'toast',
args: {
msgType: 'info',
msg: '${event.data.value|json}'
msg: '${transfer|json}'
}
}
]
@ -283,7 +283,7 @@ export default {
actionType: 'toast',
args: {
msgType: 'info',
msg: '${event.data.value|json}'
msg: '${transferEvent7|json}'
}
}
]
@ -399,7 +399,7 @@ export default {
actionType: 'toast',
args: {
msgType: 'info',
msg: '${event.data.value|json}'
msg: '${transferEvent10|json}'
}
}
]
@ -593,7 +593,7 @@ export default {
actionType: 'toast',
args: {
msgType: 'info',
msg: '${event.data.value|json}'
msg: '${transferEvent13|json}'
}
}
]

View File

@ -5,7 +5,7 @@ const getEventDesc = eventName => {
actionType: 'toast',
args: {
msgType: 'info',
msg: `派发${eventName}事件` + '${event.data|json}'
msg: `派发${eventName}事件` + '${file|json}'
}
}
]
@ -18,7 +18,7 @@ const change = {
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发change事件${event.data.file|json}'
msg: '派发change事件${file|json}'
}
}
]

View File

@ -34,14 +34,14 @@ const options = [
}
];
const onEvent = {
const onEvent = name => ({
blur: {
actions: [
{
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发blur事件${event.data.value|json}'
msg: '派发blur事件${' + name + '|json}'
}
}
]
@ -52,7 +52,7 @@ const onEvent = {
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发focus事件${event.data.value|json}'
msg: '派发focus事件${' + name + '|json}'
}
}
]
@ -63,7 +63,7 @@ const onEvent = {
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发change事件${event.data.value|json}'
msg: '派发change事件${' + name + '|json}'
}
}
]
@ -74,7 +74,14 @@ const onEvent = {
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发add事件${event.data|json}'
msg: '派发add事件${' + name + '|json}'
}
},
{
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发add事件${items|json}'
}
}
]
@ -85,7 +92,14 @@ const onEvent = {
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发edit事件${event.data|json}'
msg: '派发edit事件${' + name + '|json}'
}
},
{
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发edit事件${items|json}'
}
}
]
@ -96,7 +110,14 @@ const onEvent = {
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发delete事件${event.data|json}'
msg: '派发delete事件${' + name + '|json}'
}
},
{
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发delete事件${items|json}'
}
}
]
@ -107,12 +128,12 @@ const onEvent = {
actionType: 'toast',
args: {
msgType: 'info',
msg: '派发loadFinished事件${event.data.value|json}'
msg: '派发loadFinished事件${' + name + '|json}'
}
}
]
}
};
});
export default {
type: 'page',
@ -169,7 +190,7 @@ export default {
editable: true,
deferApi: '/api/mock2/form/deferOptions?label=${label}&waitSeconds=2',
options,
onEvent
onEvent: onEvent('tree')
},
{
type: 'tree-select',
@ -182,7 +203,7 @@ export default {
editable: true,
deferApi: '/api/mock2/form/deferOptions?label=${label}&waitSeconds=2',
options,
onEvent
onEvent: onEvent('tree多选')
}
]
}

View File

@ -9,7 +9,7 @@ export default {
body: [
{
type: 'alert',
body: '远程请求后、表单提交后,将数据回填给另一个组件。请求返回的数据可以指定存储在`outputVar`变量里,其他动作可以通过`event.data.{{outputVar}}`直接获取该数据。',
body: '远程请求后、表单提交后,将数据回填给另一个组件。请求返回的数据可以指定存储在`outputVar`变量里,其他动作可以通过`${[outputVar]}`直接获取该数据。',
level: 'info',
className: 'mb-1'
},
@ -59,7 +59,7 @@ export default {
actionType: 'setValue',
componentId: 'form_data_001',
args: {
value: '${event.data.myResult}'
value: '${myResult}'
}
}
]
@ -156,7 +156,7 @@ export default {
actionType: 'setValue',
componentId: 'form_data_002',
args: {
value: '${event.data.myResult}'
value: '${myResult}'
}
},
{
@ -404,21 +404,21 @@ export default {
actionType: 'setValue',
componentId: 'id',
args: {
value: '${event.data.value}'
value: '${picker}'
}
},
{
actionType: 'setValue',
componentId: 'platform',
args: {
value: '${event.data.option.platform}'
value: '${selectedItems.platform}'
}
},
{
actionType: 'click',
componentId: 'dialog-action',
args: {
browser: '${event.data.option.browser}'
browser: '${selectedItems.browser}'
}
}
]

View File

@ -3,7 +3,7 @@ export default {
body: [
{
type: 'alert',
body: '当某组件的值发生变化时,联动去更新另一个组件的数据,可以通过event.data来获取事件产生的数据例如输入框change事件的参数是value: string | string[]则可以通过event.data.value来获取输入的值。',
body: '当某组件的值发生变化时,联动去更新另一个组件的数据,可以通过${responseResult}来获取事件产生的数据例如输入框change事件可以通过${[name]}来获取输入的值name是组件的名称。',
level: 'info',
className: 'mb-1'
},
@ -15,6 +15,7 @@ export default {
},
{
type: 'input-text',
name: 'role',
label: '输入角色',
mode: 'horizontal',
onEvent: {
@ -25,7 +26,7 @@ export default {
componentId: 'form_data_2',
args: {
value: {
myrole: '${event.data.value}'
myrole: '${role}'
}
}
}
@ -36,6 +37,7 @@ export default {
{
type: 'input-text',
label: '输入年龄',
name: 'age',
mode: 'horizontal',
onEvent: {
change: {
@ -45,7 +47,7 @@ export default {
componentId: 'form_data_2',
args: {
value: {
age: '${event.data.value}'
age: '${age}'
}
}
}
@ -107,7 +109,7 @@ export default {
actionType: 'setValue',
componentId: 'input_data_msg2',
args: {
value: '${event.data.value}'
value: '${message}'
}
}
]
@ -156,7 +158,7 @@ export default {
actionType: 'setValue',
args: {
value: {
opts: '${optList[event.data.value]}'
opts: '${optList[select1]}'
}
},
componentId: 'u:d731760b321e'

View File

@ -10,7 +10,7 @@ export default {
body: [
{
type: 'alert',
body: '这种场景一般用在弹窗内某个异步操作后,数据的回填。请求返回的数据可以指定存储在`outputVar`变量里,其他动作可以通过event.data.{{outputVar}}直接获取该数据。',
body: '这种场景一般用在弹窗内某个异步操作后,数据的回填。请求返回的数据可以指定存储在`outputVar`变量里,其他动作可以通过${[outputVar]}直接获取该数据。',
level: 'info',
className: 'mb-1'
},
@ -77,7 +77,7 @@ export default {
componentId: 'dialog_003',
args: {
value: {
username: '${event.data.myResult.name}'
username: '${myResult.name}'
}
}
}

View File

@ -40,13 +40,13 @@ export default {
value: 4
}
],
"onEvent": {
"itemclick": {
"actions": [
onEvent: {
itemclick: {
actions: [
{
"actionType": "alert",
"args": {
"msg": "${event.data.label}~${event.data.id}</a>"
actionType: 'alert',
args: {
msg: '${item.label}~${item.value}</a>'
}
}
]
@ -221,8 +221,7 @@ export default {
},
{
type: 'html',
html:
'<p>添加其他 <span>Html 片段</span> 需要支持变量替换todo.</p>'
html: '<p>添加其他 <span>Html 片段</span> 需要支持变量替换todo.</p>'
}
]
}
@ -298,13 +297,13 @@ export default {
}
]
},
"onEvent": {
"itemclick": {
"actions": [
onEvent: {
itemclick: {
actions: [
{
"actionType": "alert",
"args": {
"msg": "${ecent.data.label}~${event.data.id}</a>"
actionType: 'alert',
args: {
msg: '${item|json}</a>'
}
}
]
@ -446,8 +445,7 @@ export default {
},
{
type: 'html',
html:
'<p>添加其他 <span>Html 片段</span> 需要支持变量替换todo.</p>'
html: '<p>添加其他 <span>Html 片段</span> 需要支持变量替换todo.</p>'
}
]
}
@ -622,8 +620,7 @@ export default {
},
{
type: 'html',
html:
'<p>添加其他 <span>Html 片段</span> 需要支持变量替换todo.</p>'
html: '<p>添加其他 <span>Html 片段</span> 需要支持变量替换todo.</p>'
}
]
}
@ -813,8 +810,7 @@ export default {
},
{
type: 'html',
html:
'<p>添加其他 <span>Html 片段</span> 需要支持变量替换todo.</p>'
html: '<p>添加其他 <span>Html 片段</span> 需要支持变量替换todo.</p>'
}
]
}
@ -1021,8 +1017,7 @@ export default {
},
{
type: 'html',
html:
'<p>添加其他 <span>Html 片段</span> 需要支持变量替换todo.</p>'
html: '<p>添加其他 <span>Html 片段</span> 需要支持变量替换todo.</p>'
}
]
}
@ -1212,8 +1207,7 @@ export default {
},
{
type: 'html',
html:
'<p>添加其他 <span>Html 片段</span> 需要支持变量替换todo.</p>'
html: '<p>添加其他 <span>Html 片段</span> 需要支持变量替换todo.</p>'
}
]
}

View File

@ -117,20 +117,15 @@ export const runAction = async (
) => {
// 用户可能需要用到事件数据和当前域的数据因此merge事件数据和当前渲染器数据
// 需要保持渲染器数据链完整
const mergeData = renderer.props.data.__super
? createObject(
createObject(renderer.props.data.__super, {
event
}),
renderer.props.data
)
: createObject(
{
event
},
renderer.props.data
);
const mergeData = createObject(
event.data,
renderer.props.data.__super
? createObject(
renderer.props.data.__super,
createObject(renderer.props.data, {event})
)
: createObject(renderer.props.data, {event})
);
// 兼容一下1.9.0之前的版本
const expression = actionConfig.expression ?? actionConfig.execOn;

View File

@ -1,91 +0,0 @@
import {FormControlProps} from '../renderers/Item';
import {createObject} from '../utils/helper';
import type {RendererEvent} from '../utils/renderer-event';
/**
*
*
* @param props props
* @param e
* @param ctx
*/
export async function rendererEventDispatcher<
T extends FormControlProps,
E = any
>(
props: T,
e: E,
ctx: Record<string, any> = {}
): Promise<RendererEvent<any> | undefined> {
const {dispatchEvent, data} = props;
return dispatchEvent(e, createObject(data, ctx));
}
/**
*
*
* @param event
* @param ctx
* @returns {Function}
*/
export function bindRendererEvent<T extends FormControlProps, E = any>(
event: E,
ctx: Record<string, any> = {},
preventable = true
) {
return function (
target: any,
propertyKey: string,
descriptor: TypedPropertyDescriptor<any>
) {
let fn =
descriptor.value && typeof descriptor.value === 'function'
? descriptor.value
: typeof descriptor?.get === 'function'
? descriptor.get()
: null;
if (!fn || typeof fn !== 'function') {
throw new Error(
`decorator can only be applied to methods not: ${typeof fn}`
);
}
return {
...descriptor,
value: async function boundFn(...params: any[]) {
const triggerProps = (this as TypedPropertyDescriptor<any> & {props: T})
?.props;
let value = triggerProps?.value;
// clear清除内容事件
if (typeof event === 'string' && event === 'clear') {
value = triggerProps?.resetValue;
}
if (preventable === false) {
rendererEventDispatcher<T>(triggerProps, event, {
value
});
} else {
const dispatcher = await rendererEventDispatcher<T>(
triggerProps,
event,
{
value
}
);
if (dispatcher?.prevented) {
return;
}
}
return fn.apply(this, [...params]);
}
};
};
}

View File

@ -18,7 +18,5 @@ import './EmailAction';
import './LinkAction';
import './ToastAction';
import './PageAction';
import './Decorators';
export * from './Decorators';
export * from './Action';

View File

@ -54,7 +54,8 @@ import isPlainObject from 'lodash/isPlainObject';
import {normalizeOptions} from '../utils/normalizeOptions';
import {optionValueCompare} from '../utils/optionValueCompare';
import {Option} from '../types';
import {isEqual} from 'lodash';
import isEqual from 'lodash/isEqual';
import {resolveEventData} from '../utils';
export {Option};
@ -475,13 +476,14 @@ export function registerOptionsControl(config: OptionsConfig) {
}
async dispatchOptionEvent(eventName: string, eventData: any = '') {
const {dispatchEvent, options, data} = this.props;
const {dispatchEvent, options} = this.props;
const rendererEvent = await dispatchEvent(
eventName,
createObject(data, {
value: eventData,
options
})
resolveEventData(
this.props,
{value: eventData, options, items: options}, // 为了保持名字统一
'value'
)
);
// 返回阻塞标识
return !!rendererEvent?.prevented;

View File

@ -1,6 +1,7 @@
import {ListenerAction, ListenerContext, runActions} from '../actions/Action';
import {RendererProps} from '../factory';
import {IScopedContext} from '../Scoped';
import {createObject} from './object';
// 事件监听器
export interface EventListeners {
@ -181,4 +182,22 @@ export const getRendererEventListeners = () => {
return rendererEventListeners;
};
/**
* name的值
* @param props
* @param data
* @param valueKey
*/
export const resolveEventData = (props: any, data: any, valueKey?: string) => {
return createObject(
props.data,
props.name && valueKey
? {
...data,
[props.name]: data[valueKey]
}
: data
);
};
export default {};

View File

@ -142,9 +142,10 @@ export class Textarea extends React.Component<TextAreaProps, TextAreaState> {
focused: false
},
() => {
if (trimContents && value && typeof value === 'string') {
onChange?.(value.trim());
}
// 和renderer的重复了不知道这里干啥的先注释了
// if (trimContents && value && typeof value === 'string') {
// onChange?.(value.trim());
// }
onBlur && onBlur(e);
}

View File

@ -333,7 +333,7 @@ exports[`EventAction:inputRange 1`] = `
style="cursor: default;"
>
"
改变为0
值为0
"
</span>
</div>
@ -435,7 +435,7 @@ exports[`EventAction:inputRange 1`] = `
placeholder=""
size="10"
type="text"
value="值改变为0"
value="值为0"
/>
</div>
</div>

View File

@ -24,7 +24,8 @@ test('EventAction:inputRange', async () => {
componentId: 'form_data',
args: {
value: {
rangeValue: '值改变为${event.data.value}了'
rangeEvent: '触发了change',
rangeValue: '值为${range}'
}
}
}
@ -37,7 +38,8 @@ test('EventAction:inputRange', async () => {
componentId: 'form_data',
args: {
value: {
rangeEvent: '触发了blur'
rangeEvent: '触发了blur',
rangeValue: '值为${range}'
}
}
}
@ -50,7 +52,8 @@ test('EventAction:inputRange', async () => {
componentId: 'form_data',
args: {
value: {
rangeEvent: '触发了focus'
rangeEvent: '触发了focus',
rangeValue: '值为${range}'
}
}
}
@ -105,7 +108,10 @@ test('EventAction:inputRange', async () => {
await wait(300);
await waitFor(() => {
expect(
container.querySelector(`[value="值改变为${valueChange}了"]`)
container.querySelector('[value="触发了change"]')
).toBeInTheDocument();
expect(
container.querySelector(`[value="值为${valueChange}"]`)
).toBeInTheDocument();
});
@ -120,8 +126,9 @@ test('EventAction:inputRange', async () => {
await wait(300);
await waitFor(() => {
expect(
container.querySelector(`[value="值改变为0了"]`)
container.querySelector('[value="触发了change"]')
).toBeInTheDocument();
expect(container.querySelector(`[value="值为0"]`)).toBeInTheDocument();
});
// focus
@ -131,6 +138,7 @@ test('EventAction:inputRange', async () => {
expect(
container.querySelector('[value="触发了focus"]')
).toBeInTheDocument();
expect(container.querySelector(`[value="值为0"]`)).toBeInTheDocument();
});
// blur
@ -138,6 +146,7 @@ test('EventAction:inputRange', async () => {
await wait(300);
await waitFor(() => {
expect(container.querySelector('[value="触发了blur"]')).toBeInTheDocument();
expect(container.querySelector(`[value="值为0"]`)).toBeInTheDocument();
});
expect(container).toMatchSnapshot();

View File

@ -786,7 +786,8 @@ export class DialogRenderer extends Dialog {
throwErrors: boolean = false,
delegate?: IScopedContext
) {
const {onAction, store, onConfirm, env, dispatchEvent} = this.props;
const {onAction, store, onConfirm, env, dispatchEvent, onClose} =
this.props;
if (action.from === this.$$id) {
return onAction
? onAction(e, action, data, throwErrors, delegate || this.context)
@ -809,8 +810,11 @@ export class DialogRenderer extends Dialog {
if (rendererEvent?.prevented) {
return;
}
store.setCurrentAction(action);
this.handleSelfClose();
// clear error
store.updateMessage();
onClose();
action.close && this.closeTarget(action.close);
} else if (action.actionType === 'confirm') {
const rendererEvent = await dispatchEvent(
@ -820,15 +824,22 @@ export class DialogRenderer extends Dialog {
if (rendererEvent?.prevented) {
return;
}
store.setCurrentAction(action);
this.tryChildrenToHandle(
const handleResult = this.tryChildrenToHandle(
{
...action,
actionType: 'submit'
},
data,
action
) || this.handleSelfClose(undefined, true);
);
if (!handleResult) {
// clear error
store.updateMessage();
onClose(true);
}
} else if (action.actionType === 'next' || action.actionType === 'prev') {
store.setCurrentAction(action);
if (action.type === 'submit') {

View File

@ -180,7 +180,9 @@ export default class DropDownButton extends React.Component<
}
async open() {
await this.props.dispatchEvent('mouseenter', {data: this.props.buttons});
await this.props.dispatchEvent('mouseenter', {
items: this.props.buttons // 为了保持名字统一
});
this.setState({
isOpened: true
});
@ -188,7 +190,7 @@ export default class DropDownButton extends React.Component<
close() {
this.timer = setTimeout(() => {
this.props.dispatchEvent('mouseleave', {data: this.props.buttons});
this.props.dispatchEvent('mouseleave', {items: this.props.buttons});
this.setState({
isOpened: false
});
@ -378,13 +380,17 @@ export default class DropDownButton extends React.Component<
size ? `Button--${size}` : ''
)}
>
{hasIcon(icon)
? <Icon icon={icon} className="icon" />
: generateIcon(cx, icon, 'm-r-xs')}
{hasIcon(icon) ? (
<Icon icon={icon} className="icon" />
) : (
generateIcon(cx, icon, 'm-r-xs')
)}
{typeof label === 'string' ? filter(label, data) : label}
{rightIcon && hasIcon(rightIcon)
? <Icon icon={icon} className="icon" />
: generateIcon(cx, rightIcon, 'm-l-xs')}
{rightIcon && hasIcon(rightIcon) ? (
<Icon icon={icon} className="icon" />
) : (
generateIcon(cx, rightIcon, 'm-l-xs')
)}
{!hideCaret ? (
<span className={cx('DropDown-caret')}>
<Icon icon="caret" className="icon" />

View File

@ -4,7 +4,8 @@ import {
OptionsControl,
OptionsControlProps,
Option,
FormOptionsControl
FormOptionsControl,
resolveEventData
} from 'amis-core';
import {Select} from 'amis-ui';
import {Api} from 'amis-core';
@ -184,9 +185,7 @@ export default class ChainedSelectControl extends React.Component<
const rendererEvent = await dispatchEvent(
'change',
createObject(data, {
value: valueRes
})
resolveEventData(this.props, {value: valueRes}, 'value')
);
if (rendererEvent?.prevented) {
@ -240,9 +239,7 @@ export default class ChainedSelectControl extends React.Component<
const rendererEvent = await dispatchEvent(
'change',
createObject(data, {
value: valueRes
})
resolveEventData(this.props, {value: valueRes}, 'value')
);
if (rendererEvent?.prevented) {

View File

@ -1,5 +1,10 @@
import React from 'react';
import {FormItem, FormControlProps, FormBaseControl} from 'amis-core';
import {
FormItem,
FormControlProps,
FormBaseControl,
resolveEventData
} from 'amis-core';
import cx from 'classnames';
import {Checkbox} from 'amis-ui';
import {withBadge, BadgeObject} from 'amis-ui';
@ -74,12 +79,10 @@ export default class CheckboxControl extends React.Component<
@autobind
async dispatchChangeEvent(eventData: any = {}) {
const {dispatchEvent, data, onChange} = this.props;
const {dispatchEvent, onChange} = this.props;
const rendererEvent = await dispatchEvent(
'change',
createObject(data, {
value: eventData
})
resolveEventData(this.props, {value: eventData}, 'value')
);
if (rendererEvent?.prevented) {

View File

@ -1,7 +1,12 @@
import React from 'react';
import {findDOMNode} from 'react-dom';
import cloneDeep from 'lodash/cloneDeep';
import {FormItem, FormControlProps, FormBaseControl} from 'amis-core';
import {
FormItem,
FormControlProps,
FormBaseControl,
resolveEventData
} from 'amis-core';
import {ActionObject, Api} from 'amis-core';
import {ComboStore, IComboStore} from 'amis-core';
import {Tabs as CTabs, Tab, Button} from 'amis-ui';
@ -509,7 +514,6 @@ export default class ComboControl extends React.Component<ComboProps> {
scaffold,
disabled,
submitOnChange,
data,
dispatchEvent
} = this.props;
@ -519,12 +523,17 @@ export default class ComboControl extends React.Component<ComboProps> {
let value = this.getValueAsArray();
// todo:这里的数据结构与表单项最终类型不一致需要区分是否多选、是否未input-kv or input-kvs
const rendererEvent = await dispatchEvent(
'add',
createObject(data, {
value:
flat && joinValues ? value.join(delimiter || ',') : cloneDeep(value)
})
resolveEventData(
this.props,
{
value:
flat && joinValues ? value.join(delimiter || ',') : cloneDeep(value)
},
'value'
)
);
if (rendererEvent?.prevented) {
@ -572,13 +581,21 @@ export default class ComboControl extends React.Component<ComboProps> {
let value = this.getValueAsArray();
const ctx = createObject(data, value[key]);
// todo:这里的数据结构与表单项最终类型不一致需要区分是否多选、是否未input-kv or input-kvs
const rendererEvent = await dispatchEvent(
'delete',
createObject(data, {
key,
value:
flat && joinValues ? value.join(delimiter || ',') : cloneDeep(value)
})
resolveEventData(
this.props,
{
key,
value:
flat && joinValues
? value.join(delimiter || ',')
: cloneDeep(value),
item: value[key]
},
'value'
)
);
if (rendererEvent?.prevented) {
@ -969,13 +986,22 @@ export default class ComboControl extends React.Component<ComboProps> {
@autobind
async handleTabSelect(key: number) {
const {store, data, dispatchEvent} = this.props;
const {store, data, name, value, dispatchEvent} = this.props;
const eventData = {
key,
item: value[key]
};
const rendererEvent = await dispatchEvent(
'tabsChange',
createObject(data, {
key
})
createObject(
data,
name
? {
...eventData,
[name]: value
}
: eventData
)
);
if (rendererEvent?.prevented) {

View File

@ -1,10 +1,14 @@
import React from 'react';
import {FormItem, FormControlProps, FormBaseControl} from 'amis-core';
import {
FormItem,
FormControlProps,
FormBaseControl,
resolveEventData
} from 'amis-core';
import {LazyComponent} from 'amis-core';
import {isPureVariable, resolveVariableAndFilter} from 'amis-core';
import {FormBaseControlSchema, SchemaTokenizeableString} from '../../Schema';
import {autobind} from 'amis-core';
import {bindRendererEvent} from 'amis-core';
import type {Position} from 'monaco-editor';
import type {ListenerAction} from 'amis-core';
@ -130,18 +134,42 @@ export class DiffEditor extends React.Component<DiffEditorProps, any> {
this.editor?.setPosition(position);
}
@bindRendererEvent<DiffEditorProps, DiffEditorRendererEvent>('focus')
handleFocus() {
async handleFocus(e: any) {
const {dispatchEvent, value, onFocus} = this.props;
this.setState({
focused: true
});
const rendererEvent = await dispatchEvent(
'focus',
resolveEventData(this.props, {value}, 'value')
);
if (rendererEvent?.prevented) {
return;
}
onFocus?.(e);
}
@bindRendererEvent<DiffEditorProps, DiffEditorRendererEvent>('blur')
handleBlur() {
async handleBlur(e: any) {
const {dispatchEvent, value, onBlur} = this.props;
this.setState({
focused: false
});
const rendererEvent = await dispatchEvent(
'blur',
resolveEventData(this.props, {value}, 'value')
);
if (rendererEvent?.prevented) {
return;
}
onBlur?.(e);
}
componentDidUpdate(prevProps: any) {
@ -225,9 +253,20 @@ export class DiffEditor extends React.Component<DiffEditorProps, any> {
});
}
handleModifiedEditorChange() {
const {onChange} = this.props;
onChange && onChange(this.modifiedEditor.getModel().getValue());
async handleModifiedEditorChange() {
const {onChange, dispatchEvent} = this.props;
const value = this.modifiedEditor.getModel().getValue();
const rendererEvent = await dispatchEvent(
'change',
resolveEventData(this.props, {value}, 'value')
);
if (rendererEvent?.prevented) {
return;
}
onChange && onChange(value);
}
prevHeight = 0;

View File

@ -1,10 +1,14 @@
import React from 'react';
import {FormItem, FormControlProps, FormBaseControl} from 'amis-core';
import {
FormItem,
FormControlProps,
FormBaseControl,
resolveEventData
} from 'amis-core';
import {LazyComponent} from 'amis-core';
import {Editor} from 'amis-ui';
import {autobind} from 'amis-core';
import {isPureVariable, resolveVariableAndFilter} from 'amis-core';
import {bindRendererEvent} from 'amis-core';
import type {Position} from 'monaco-editor';
import type {ListenerAction} from 'amis-core';
@ -148,6 +152,7 @@ export default class EditorControl extends React.Component<EditorProps, any> {
this.handleFocus = this.handleFocus.bind(this);
this.handleBlur = this.handleBlur.bind(this);
this.handleChange = this.handleChange.bind(this);
this.handleEditorMounted = this.handleEditorMounted.bind(this);
}
@ -177,18 +182,56 @@ export default class EditorControl extends React.Component<EditorProps, any> {
this.editor?.setPosition(position);
}
@bindRendererEvent<EditorProps, EditorRendererEvent>('focus')
handleFocus() {
async handleFocus(e: any) {
const {dispatchEvent, value, onFocus} = this.props;
this.setState({
focused: true
});
const rendererEvent = await dispatchEvent(
'focus',
resolveEventData(this.props, {value}, 'value')
);
if (rendererEvent?.prevented) {
return;
}
onFocus?.(e);
}
@bindRendererEvent<EditorProps, EditorRendererEvent>('blur')
handleBlur() {
async handleBlur(e: any) {
const {dispatchEvent, value, onBlur} = this.props;
this.setState({
focused: false
});
const rendererEvent = await dispatchEvent(
'blur',
resolveEventData(this.props, {value}, 'value')
);
if (rendererEvent?.prevented) {
return;
}
onBlur?.(e);
}
async handleChange(e: any) {
const {dispatchEvent, onChange} = this.props;
const rendererEvent = await dispatchEvent(
'change',
resolveEventData(this.props, {value: e}, 'value')
);
if (rendererEvent?.prevented) {
return;
}
onChange?.(e);
}
handleEditorMounted(editor: any, monaco: any) {
@ -276,7 +319,7 @@ export default class EditorControl extends React.Component<EditorProps, any> {
component={Editor}
allowFullscreen={allowFullscreen}
value={finnalValue}
onChange={onChange}
onChange={this.handleChange}
disabled={disabled}
onFocus={this.handleFocus}
onBlur={this.handleBlur}

View File

@ -1,5 +1,10 @@
import React from 'react';
import {FormItem, FormControlProps, FormBaseControl} from 'amis-core';
import {
FormItem,
FormControlProps,
FormBaseControl,
resolveEventData
} from 'amis-core';
import {ClassNamesFn, themeable, ThemeProps} from 'amis-core';
import {Spinner} from 'amis-ui';
import {Select} from 'amis-ui';
@ -476,13 +481,11 @@ export class LocationControl extends React.Component<LocationControlProps> {
@autobind
async handleChange(value: number | string) {
const {dispatchEvent, data, onChange} = this.props;
const {dispatchEvent, onChange} = this.props;
const rendererEvent = await dispatchEvent(
'change',
createObject(data, {
value
})
resolveEventData(this.props, {value}, 'value')
);
if (rendererEvent?.prevented) {

View File

@ -1,5 +1,10 @@
import React from 'react';
import {FormItem, FormControlProps, FormBaseControl} from 'amis-core';
import {
FormItem,
FormControlProps,
FormBaseControl,
resolveEventData
} from 'amis-core';
import cx from 'classnames';
import {filterDate, isPureVariable, resolveVariableAndFilter} from 'amis-core';
import moment from 'moment';
@ -423,8 +428,8 @@ export default class DateControl extends React.PureComponent<
// 派发有event的事件
@autobind
dispatchEvent(e: React.SyntheticEvent<HTMLElement>) {
const {dispatchEvent, data, value} = this.props;
dispatchEvent(e, createObject(data, {value}));
const {dispatchEvent, value} = this.props;
dispatchEvent(e, resolveEventData(this.props, {value}, 'value'));
}
// 动作
@ -444,10 +449,10 @@ export default class DateControl extends React.PureComponent<
// 值的变化
@autobind
async handleChange(nextValue: any) {
const {dispatchEvent, data} = this.props;
const {dispatchEvent} = this.props;
const dispatcher = dispatchEvent(
'change',
createObject(data, {value: nextValue})
resolveEventData(this.props, {value: nextValue}, 'value')
);
if (dispatcher?.prevented) {
return;

View File

@ -1,5 +1,10 @@
import React from 'react';
import {FormItem, FormControlProps, FormBaseControl} from 'amis-core';
import {
FormItem,
FormControlProps,
FormBaseControl,
resolveEventData
} from 'amis-core';
import cx from 'classnames';
import {filterDate, parseDuration} from 'amis-core';
import 'moment/locale/zh-cn';
@ -196,12 +201,7 @@ export default class DateRangeControl extends React.Component<DateRangeProps> {
dispatchEvent(eventName: string) {
const {dispatchEvent, data, value} = this.props;
dispatchEvent(
eventName,
createObject(data, {
value
})
);
dispatchEvent(eventName, resolveEventData(this.props, {value}, 'value'));
}
// 动作
@ -224,7 +224,7 @@ export default class DateRangeControl extends React.Component<DateRangeProps> {
const {dispatchEvent, data} = this.props;
const dispatcher = dispatchEvent(
'change',
createObject(data, {value: nextValue})
resolveEventData(this.props, {value: nextValue}, 'value')
);
if (dispatcher?.prevented) {
return;

View File

@ -1,7 +1,7 @@
import React from 'react';
import Dropzone from 'react-dropzone';
import {autobind, createObject, isObject} from 'amis-core';
import {FormItem, FormControlProps} from 'amis-core';
import {autobind, createObject, isObject, resolveEventData} from 'amis-core';
import {FormItem, FormControlProps, FormBaseControl} from 'amis-core';
import {FormBaseControlSchema} from '../../Schema';
import type {CellValue, CellRichTextValue} from 'exceljs';
@ -74,7 +74,7 @@ export default class ExcelControl extends React.PureComponent<
@autobind
handleDrop(files: File[]) {
const {allSheets, onChange, dispatchEvent, data} = this.props;
const {allSheets, onChange, dispatchEvent} = this.props;
const excel = files[0];
const reader = new FileReader();
reader.readAsArrayBuffer(excel);
@ -111,9 +111,7 @@ export default class ExcelControl extends React.PureComponent<
const {dispatchEvent, data} = this.props;
return await dispatchEvent(
eventName,
createObject(data, {
value: eventData
})
resolveEventData(this.props, {value: eventData}, 'value')
);
}

View File

@ -1,5 +1,10 @@
import React from 'react';
import {FormItem, FormControlProps, prettyBytes} from 'amis-core';
import {
FormItem,
FormControlProps,
prettyBytes,
resolveEventData
} from 'amis-core';
import find from 'lodash/find';
import isPlainObject from 'lodash/isPlainObject';
import {Payload, ApiObject, ApiString, ActionObject} from 'amis-core';
@ -844,9 +849,9 @@ export default class FileControl extends React.Component<FileProps, FileState> {
(ret.data as any).value || (ret.data as any).url || ret.data;
const dispatcher = await this.dispatchEvent('success', {
...file,
value,
state: 'uploaded'
...file, // 保留历史结构
item: file,
value
});
if (dispatcher?.prevented) {
return;
@ -859,7 +864,10 @@ export default class FileControl extends React.Component<FileProps, FileState> {
});
})
.catch(async error => {
const dispatcher = await this.dispatchEvent('fail', {file, error});
const dispatcher = await this.dispatchEvent('fail', {
item: file,
error
});
if (dispatcher?.prevented) {
return;
}
@ -871,7 +879,10 @@ export default class FileControl extends React.Component<FileProps, FileState> {
const files = this.state.files.concat();
const removeFile = files[index];
// 触发移出文件事件
const dispatcher = await this.dispatchEvent('remove', removeFile);
const dispatcher = await this.dispatchEvent('remove', {
...removeFile, // 保留历史结构
item: removeFile
});
if (dispatcher?.prevented) {
return;
}
@ -1279,21 +1290,27 @@ export default class FileControl extends React.Component<FileProps, FileState> {
}
async dispatchEvent(e: string, data?: Record<string, any>) {
const {dispatchEvent} = this.props;
const {dispatchEvent, multiple} = this.props;
const getEventData = (item: Record<string, any>) => ({
name: item.path || item.name,
value: item.value,
state: item.state,
error: item.error
});
const value = data
const value: any = data
? getEventData(data)
: this.state.files.map(item => getEventData(item));
return dispatchEvent(
e,
createObject(this.props.data, {
file: value
})
resolveEventData(
this.props,
{
...data,
file: multiple ? value : value?.[0]
},
'file'
)
);
}

View File

@ -3,7 +3,8 @@ import {
FormItem,
FormControlProps,
FormBaseControl,
prettyBytes
prettyBytes,
resolveEventData
} from 'amis-core';
// import 'cropperjs/dist/cropper.css';
const Cropper = React.lazy(() => import('react-cropper'));
@ -729,7 +730,10 @@ export default class ImageControl extends React.Component<
async removeFile(file: FileValue, index: number) {
const files = this.files.concat();
const dispatcher = await this.dispatchEvent('remove', file);
const dispatcher = await this.dispatchEvent('remove', {
...file, // 保留历史结构
item: file
});
if (dispatcher?.prevented) {
return;
}
@ -1083,7 +1087,10 @@ export default class ImageControl extends React.Component<
if (error) {
file.state = 'invalid';
const dispatcher = await this.dispatchEvent('fail', {file, error});
const dispatcher = await this.dispatchEvent('fail', {
item: file,
error
});
if (dispatcher?.prevented) {
return;
}
@ -1114,9 +1121,9 @@ export default class ImageControl extends React.Component<
obj.value = obj.value || obj.url;
const dispatcher = await this.dispatchEvent('success', {
...file,
value: obj.value,
state: 'uploaded'
...file, // 保留历史结构
item: file,
value: obj.value
});
if (dispatcher?.prevented) {
return;
@ -1125,7 +1132,7 @@ export default class ImageControl extends React.Component<
})
.catch(async error => {
const dispatcher = await this.dispatchEvent('fail', {
file,
item: file,
error
});
if (dispatcher?.prevented) {
@ -1287,17 +1294,24 @@ export default class ImageControl extends React.Component<
}
async dispatchEvent(e: string, data?: Record<string, any>) {
const {dispatchEvent} = this.props;
const {dispatchEvent, multiple} = this.props;
const getEventData = (item: Record<string, any>) => ({
name: item.path || item.name,
value: item.value,
state: item.state,
error: item.error
});
const value = data
const value: any = data
? getEventData(data)
: this.files.map(item => getEventData(item));
return dispatchEvent(e, createObject(this.props.data, {file: value}));
return dispatchEvent(
e,
resolveEventData(
this.props,
{...data, file: multiple ? value : value?.[0]},
'file'
)
);
}
// 动作

View File

@ -1,6 +1,11 @@
import React from 'react';
import {toFixed} from 'rc-input-number/lib/utils/MiniDecimal';
import {FormItem, FormControlProps} from 'amis-core';
import {
FormItem,
FormControlProps,
FormBaseControl,
resolveEventData
} from 'amis-core';
import cx from 'classnames';
import {NumberInput, Select} from 'amis-ui';
import {
@ -242,25 +247,18 @@ export default class NumberControl extends React.Component<
// 派发有event的事件
@autobind
async dispatchEvent(eventName: string) {
const {dispatchEvent, data, value} = this.props;
const {dispatchEvent, value} = this.props;
dispatchEvent(
eventName,
createObject(data, {
value
})
);
dispatchEvent(eventName, resolveEventData(this.props, {value}, 'value'));
}
async handleChange(inputValue: any) {
const {onChange, data, dispatchEvent} = this.props;
const {onChange, dispatchEvent} = this.props;
const value = this.getValue(inputValue);
const rendererEvent = await dispatchEvent(
'change',
createObject(data, {
value
})
resolveEventData(this.props, {value}, 'value')
);
if (rendererEvent?.prevented) {
return;

View File

@ -13,6 +13,7 @@ import {autobind, createObject} from 'amis-core';
import {filter} from 'amis-core';
import {FormBaseControlSchema, SchemaObject} from '../../Schema';
import {ActionObject} from 'amis-core';
import {resolveEventData} from 'amis-core';
/**
* Range
@ -384,30 +385,50 @@ export class Input extends React.Component<RangeItemProps, any> {
*
*/
@autobind
onBlur() {
const {data, dispatchEvent, value} = this.props;
async onBlur(e: any) {
const {dispatchEvent, value, onBlur} = this.props;
dispatchEvent(
const rendererEvent = await dispatchEvent(
'blur',
createObject(data, {
value
})
resolveEventData(
this.props,
{
value
},
'value'
)
);
if (rendererEvent?.prevented) {
return;
}
onBlur?.(e);
}
/**
*
*/
@autobind
async onFocus() {
const {data, dispatchEvent, value} = this.props;
async onFocus(e: any) {
const {dispatchEvent, value, onFocus} = this.props;
dispatchEvent(
const rendererEvent = await dispatchEvent(
'focus',
createObject(data, {
value
})
resolveEventData(
this.props,
{
value
},
'value'
)
);
if (rendererEvent?.prevented) {
return;
}
onFocus?.(e);
}
render() {
@ -553,14 +574,18 @@ export default class RangeControl extends React.PureComponent<
@autobind
async onChange(value: FormatValue) {
this.setState({value: this.getValue(value)});
const {onChange, data, dispatchEvent} = this.props;
const {onChange, dispatchEvent} = this.props;
const result = this.getFormatValue(value);
const rendererEvent = await dispatchEvent(
'change',
createObject(data, {
value: result
})
resolveEventData(
this.props,
{
value: result
},
'value'
)
);
if (rendererEvent?.prevented) {
@ -576,7 +601,7 @@ export default class RangeControl extends React.PureComponent<
@autobind
onAfterChange() {
const {value} = this.state;
const {onAfterChange, dispatchEvent, data} = this.props;
const {onAfterChange} = this.props;
const result = this.getFormatValue(value);
onAfterChange && onAfterChange(result);
}

View File

@ -1,5 +1,10 @@
import React from 'react';
import {FormItem, FormControlProps, FormBaseControl} from 'amis-core';
import {
FormItem,
FormControlProps,
FormBaseControl,
resolveEventData
} from 'amis-core';
import {autobind, createObject} from 'amis-core';
import {ActionObject} from 'amis-core';
import {Rating} from 'amis-ui';
@ -101,13 +106,11 @@ export default class RatingControl extends React.Component<RatingProps, any> {
@autobind
async handleChange(value: any) {
const {onChange, dispatchEvent, data} = this.props;
const {onChange, dispatchEvent} = this.props;
const rendererEvent = await dispatchEvent(
'change',
createObject(data, {
value
})
resolveEventData(this.props, {value}, 'value')
);
if (rendererEvent?.prevented) {

View File

@ -3,7 +3,8 @@ import {
OptionsControl,
OptionsControlProps,
Option,
FormOptionsControl
FormOptionsControl,
resolveEventData
} from 'amis-core';
import Downshift from 'downshift';
import find from 'lodash/find';
@ -144,13 +145,18 @@ export default class TagControl extends React.PureComponent<
@autobind
async dispatchEvent(eventName: string, eventData: any = {}) {
const {dispatchEvent, options, data} = this.props;
const {dispatchEvent, options} = this.props;
const rendererEvent = await dispatchEvent(
eventName,
createObject(data, {
options,
...eventData
})
resolveEventData(
this.props,
{
options,
items: options, // 为了保持名字统一
...eventData
},
'value'
)
);
// 返回阻塞标识
return !!rendererEvent?.prevented;
@ -523,7 +529,7 @@ export default class TagControl extends React.PureComponent<
disabled: reachMax || item.disabled,
className: cx('ListMenu-item', {
'is-disabled': reachMax
}),
})
})
})}
/>

View File

@ -3,7 +3,8 @@ import {
OptionsControl,
OptionsControlProps,
highlight,
FormOptionsControl
FormOptionsControl,
resolveEventData
} from 'amis-core';
import {ActionObject} from 'amis-core';
import Downshift, {StateChangeOptions} from 'downshift';
@ -19,7 +20,6 @@ import {Spinner} from 'amis-ui';
import {ActionSchema} from '../Action';
import {FormOptionsSchema, SchemaApi} from '../../Schema';
import {generateIcon} from 'amis-core';
import {rendererEventDispatcher, bindRendererEvent} from 'amis-core';
import type {Option} from 'amis-core';
import type {ListenerAction} from 'amis-core';
@ -300,8 +300,22 @@ export default class TextControl extends React.PureComponent<
onChange(this.normalizeValue(newValue));
}
@bindRendererEvent<TextProps, InputTextRendererEvent>('click')
handleClick() {
async handleClick() {
const {dispatchEvent, value} = this.props;
const rendererEvent = await dispatchEvent(
'click',
resolveEventData(
this.props,
{
value
},
'value'
)
);
if (rendererEvent?.prevented) {
return;
}
// 已经 focus 的就不重复执行,否则总重新定位光标
this.state.isFocused || this.focus();
this.setState({
@ -309,19 +323,33 @@ export default class TextControl extends React.PureComponent<
});
}
@bindRendererEvent<TextProps, InputTextRendererEvent>('focus')
handleFocus(e: any) {
async handleFocus(e: any) {
const {dispatchEvent, onFocus, value} = this.props;
this.setState({
isOpen: true,
isFocused: true
});
this.props.onFocus && this.props.onFocus(e);
const rendererEvent = await dispatchEvent(
'focus',
resolveEventData(
this.props,
{
value
},
'value'
)
);
if (rendererEvent?.prevented) {
return;
}
onFocus?.(e);
}
@bindRendererEvent<TextProps, InputTextRendererEvent>('blur')
handleBlur(e: any) {
const {onBlur, trimContents, value, onChange} = this.props;
async handleBlur(e: any) {
const {onBlur, trimContents, value, onChange, dispatchEvent} = this.props;
this.setState(
{
@ -334,18 +362,33 @@ export default class TextControl extends React.PureComponent<
}
);
const rendererEvent = await dispatchEvent(
'blur',
resolveEventData(
this.props,
{
value
},
'value'
)
);
if (rendererEvent?.prevented) {
return;
}
onBlur && onBlur(e);
}
async handleInputChange(evt: React.ChangeEvent<HTMLInputElement>) {
let value = this.transformValue(evt.currentTarget.value);
const {creatable, multiple, onChange} = this.props;
const dispatcher = await rendererEventDispatcher<
TextProps,
InputTextRendererEvent
>(this.props, 'change', {value});
const {creatable, multiple, onChange, dispatchEvent} = this.props;
const rendererEvent = await dispatchEvent(
'change',
resolveEventData(this.props, {value}, 'value')
);
if (dispatcher?.prevented) {
if (rendererEvent?.prevented) {
return;
}
@ -364,7 +407,8 @@ export default class TextControl extends React.PureComponent<
}
async handleKeyDown(evt: React.KeyboardEvent<HTMLInputElement>) {
const {selectedOptions, onChange, multiple, creatable} = this.props;
const {selectedOptions, onChange, multiple, creatable, dispatchEvent} =
this.props;
if (selectedOptions.length && !this.state.inputValue && evt.keyCode === 8) {
evt.preventDefault();
@ -402,12 +446,12 @@ export default class TextControl extends React.PureComponent<
value = this.normalizeValue(newValue).concat();
}
const dispatcher = await rendererEventDispatcher<
TextProps,
InputTextRendererEvent
>(this.props, 'enter', {value});
const rendererEvent = await dispatchEvent(
'enter',
resolveEventData(this.props, {value}, 'value')
);
if (dispatcher?.prevented) {
if (rendererEvent?.prevented) {
return;
}
@ -505,14 +549,15 @@ export default class TextControl extends React.PureComponent<
@autobind
async handleNormalInputChange(e: React.ChangeEvent<HTMLInputElement>) {
const {onChange} = this.props;
const {onChange, dispatchEvent} = this.props;
let value = e.currentTarget.value;
const dispatcher = await rendererEventDispatcher<
TextProps,
InputTextRendererEvent
>(this.props, 'change', {value: this.transformValue(value)});
if (dispatcher?.prevented) {
const rendererEvent = await dispatchEvent(
'change',
resolveEventData(this.props, {value: this.transformValue(value)}, 'value')
);
if (rendererEvent?.prevented) {
return;
}

View File

@ -8,7 +8,8 @@ import {
createObject,
ActionObject,
isPureVariable,
resolveVariableAndFilter
resolveVariableAndFilter,
resolveEventData
} from 'amis-core';
import {Spinner} from 'amis-ui';
import {FormOptionsSchema, SchemaApi} from '../../Schema';
@ -145,13 +146,11 @@ export default class TreeControl extends React.Component<TreeProps> {
@autobind
async handleChange(value: any) {
const {onChange, dispatchEvent, data} = this.props;
const {onChange, dispatchEvent} = this.props;
const rendererEvent = await dispatchEvent(
'change',
createObject(data, {
value
})
resolveEventData(this.props, {value}, 'value')
);
if (rendererEvent?.prevented) {

View File

@ -4,7 +4,12 @@
*/
import React from 'react';
import {FormBaseControl, FormControlProps, FormItem} from 'amis-core';
import {
FormBaseControl,
FormControlProps,
FormItem,
resolveEventData
} from 'amis-core';
import {buildApi, isValidApi, isEffectiveApi} from 'amis-core';
import {Checkbox, Spinner} from 'amis-ui';
import {autobind, setVariable, createObject} from 'amis-core';
@ -275,9 +280,7 @@ export default class MatrixCheckbox extends React.Component<
const rendererEvent = await dispatchEvent(
'change',
createObject(data, {
value: value.concat()
})
resolveEventData(this.props, {value: value.concat()}, 'value')
);
if (rendererEvent?.prevented) {
return;

View File

@ -1,5 +1,5 @@
import React from 'react';
import {Overlay} from 'amis-core';
import {Overlay, resolveEventData} from 'amis-core';
import {Checkbox} from 'amis-ui';
import {PopOver} from 'amis-core';
import {PopUp} from 'amis-ui';
@ -139,12 +139,10 @@ export default class NestedSelectControl extends React.Component<
@autobind
async dispatchEvent(eventName: string, eventData: any = {}) {
const {dispatchEvent, data} = this.props;
const {dispatchEvent} = this.props;
const rendererEvent = await dispatchEvent(
eventName,
createObject(data, {
...eventData
})
resolveEventData(this.props, eventData, 'value')
);
// 返回阻塞标识
return !!rendererEvent?.prevented;

View File

@ -19,7 +19,8 @@ import {
isPureVariable,
resolveVariableAndFilter,
isApiOutdated,
isEffectiveApi
isEffectiveApi,
resolveEventData
} from 'amis-core';
import {Html, Icon} from 'amis-ui';
import {FormOptionsSchema, SchemaTpl} from '../../Schema';
@ -283,9 +284,14 @@ export default class PickerControl extends React.PureComponent<
});
additionalOptions.length && setOptions(options.concat(additionalOptions));
const option = multiple ? items : items[0];
const rendererEvent = await dispatchEvent(
'change',
createObject(data, {value, option: items[0]})
resolveEventData(
this.props,
{value, option, selectedItems: option},
'value'
)
);
if (rendererEvent?.prevented) {
return;
@ -295,13 +301,14 @@ export default class PickerControl extends React.PureComponent<
}
@autobind
async handleItemClick(itemlabel: string, itemid: string) {
const {data, dispatchEvent, setOptions} = this.props;
async handleItemClick(item: any) {
const {data, dispatchEvent} = this.props;
const rendererEvent = await dispatchEvent(
'itemclick',
createObject(data, {label: itemlabel, id: itemid})
createObject(data, {item})
);
if (rendererEvent?.prevented) {
return;
}
@ -410,10 +417,7 @@ export default class PickerControl extends React.PureComponent<
className={`${ns}Picker-valueLabel`}
onClick={e => {
e.stopPropagation();
this.handleItemClick(
getVariable(item, labelField || 'label'),
getVariable(item, 'id') || ''
);
this.handleItemClick(item);
}}
>
{labelTpl ? (

View File

@ -5,7 +5,8 @@ import {
OptionsControl,
OptionsControlProps,
Option,
FormOptionsControl
FormOptionsControl,
resolveEventData
} from 'amis-core';
import {autobind, isEmpty, createObject} from 'amis-core';
import {ActionObject} from 'amis-core';
@ -70,10 +71,15 @@ export default class RadiosControl extends React.Component<RadiosProps, any> {
const rendererEvent = await dispatchEvent(
'change',
createObject(data, {
value: option,
options
})
resolveEventData(
this.props,
{
value: option,
options,
items: options // 为了保持名字统一
},
'value'
)
);
if (rendererEvent?.prevented) {
return;

View File

@ -4,7 +4,8 @@ import {
OptionsControl,
OptionsControlProps,
Option,
FormOptionsControl
FormOptionsControl,
resolveEventData
} from 'amis-core';
import {normalizeOptions} from 'amis-core';
import find from 'lodash/find';
@ -253,12 +254,17 @@ export default class SelectControl extends React.Component<SelectProps, any> {
// 触发渲染器事件
const rendererEvent = await dispatchEvent(
eventName,
createObject(data, {
options,
value: ['onEdit', 'onDelete'].includes(event)
? eventData
: eventData && eventData.value
})
resolveEventData(
this.props,
{
options,
items: options, // 为了保持名字统一
value: ['onEdit', 'onDelete'].includes(event)
? eventData
: eventData && eventData.value
},
'value'
)
);
if (rendererEvent?.prevented) {
return;
@ -281,10 +287,15 @@ export default class SelectControl extends React.Component<SelectProps, any> {
const rendererEvent = await dispatchEvent(
'change',
createObject(data, {
value: newValue,
options
})
resolveEventData(
this.props,
{
value: newValue,
options,
items: options // 为了保持名字统一
},
'value'
)
);
if (rendererEvent?.prevented) {
return;

Some files were not shown because too many files have changed in this diff Show More