diff --git a/gh-pages/docs/components/action.html b/gh-pages/docs/components/action.html index a347df898..79fc59830 100644 --- a/gh-pages/docs/components/action.html +++ b/gh-pages/docs/components/action.html @@ -14,7 +14,7 @@ - +
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + \n\n\n\n
source
接口中配置的参数waitSeconds=1
和maxLevel=4
是测试接口所需参数,实际使用自己接口时不需要添加这两个参数
为了帮助后端接口获取当前选择器状态,chained-select 会默认给 source 接口的数据域中,添加若干个参数:
\nvalue
: 选中的表单项值;level
: 当前拉取数据时的层级,parentId
: 上一级选项的值,数据格式基于配置的joinValues
和extractValue
属性parent
: 上一级选项的完整的数据格式除了支持 普通表单项属性表 中的配置以外,还支持下面一些配置
\n属性名 | \n类型 | \n默认值 | \n说明 | \n
---|---|---|---|
options | \nArray<object> 或Array<string> | \n\n | 选项组 | \n
source | \nstring 或 API | \n\n | 动态选项组 | \n
autoComplete | \nstring 或 API | \n\n | 自动选中 | \n
delimiter | \nstring | \n, | \n拼接符 | \n
labelField | \nboolean | \n"label" | \n选项标签字段 | \n
valueField | \nboolean | \n"value" | \n选项值字段 | \n
joinValues | \nboolean | \ntrue | \n拼接值 | \n
extractValue | \nboolean | \nfalse | \n提取值 | \n
@todo 可能还支持别的
\n", + "html": "无限级别下拉,只支持单选,且必须和 source
搭配,通过 API 拉取数据,只要 API 有返回结果,就能一直无限级别下拉下去。
\n\n\n
source
接口中配置的参数waitSeconds=1
和maxLevel=4
是测试接口所需参数,实际使用自己接口时不需要添加这两个参数
为了帮助后端接口获取当前选择器状态,chained-select 会默认给 source 接口的数据域中,添加若干个参数:
\nvalue
: 选中的表单项值;level
: 当前拉取数据时的层级,parentId
: 上一级选项的值,数据格式基于配置的joinValues
和extractValue
属性parent
: 上一级选项的完整的数据格式除了支持 普通表单项属性表 中的配置以外,还支持下面一些配置
\n属性名 | \n类型 | \n默认值 | \n说明 | \n
---|---|---|---|
options | \nArray<object> 或Array<string> | \n\n | 选项组 | \n
source | \nstring 或 API | \n\n | 动态选项组 | \n
autoComplete | \nstring 或 API | \n\n | 自动选中 | \n
delimiter | \nstring | \n, | \n拼接符 | \n
labelField | \nboolean | \n"label" | \n选项标签字段 | \n
valueField | \nboolean | \n"value" | \n选项值字段 | \n
joinValues | \nboolean | \ntrue | \n拼接值 | \n
extractValue | \nboolean | \nfalse | \n提取值 | \n
默认展示模式为文字表单项分行显示
\n\n水平模式,左右摆放,左右比率分配。
\n\n可以配置horizontal
属性,调整偏移量,格式如下:
"horizontal": {\n "left": 2,\n "right": 10,\n "offset": 2\n}\n
\n使用内联模式展现表单项
\n\n使用 group 实现一行显示多个表单项
\n\nForm 默认会在底部渲染一个提交按钮,用于执行表单的提交行为。你可以通过两种方式去掉这个默认的提交按钮:
\n"submitText": ""
"actions": []
同样,你可以通过 actions 属性,配置任意你想要的行为按钮。
\n\n请记住,如果想触发表单提交行为,请配置"actionType": "submit"
或"type": "submit"
按钮
通过配置"wrapWithPanel": false
,可以去掉默认表单边框(包括标题,按钮栏以及边距样式等)。
注意!配置该属性后,title
和actions
属性将失效并无法渲染,请在表单内自行配置。
如果表单项较多导致表单过长,而不方便操作底部的按钮栏,可以配置"affixFooter": true
属性,将底部按钮栏固定在浏览器底部
表单可以通过配置initApi
,实现表单初始化时请求接口,用于展示数据或初始化表单项。
Form 支持轮训初始化接口,步骤如下:
\ninitApi
interval
:单位为ms
,最低值3000
,低于该值按3000
处理如果希望在满足某个条件的情况下停止轮训,配置stopAutoRefreshWhen
表达式。
配置api
属性,当表单执行提交行为时,会默认将当前表单数据域中的数据使用post
方式发送给所配置api
点击提交按钮,会看到发送表单请求,请求数据体为:
\n{\n \"name\": \"xxx\",\n \"email\": \"xxx@xx.com\"\n}\n
\n当你需要配置特定的请求方式,请求体,header
时,使用对象类型 api 配置,并使用 数据映射 进行数据配置。下面示例我们更改了请求方法为PUT
,并在原提交数据的基础上添加一个字段"_from"
。更多用法查看 API 文档 和 数据映射文档
触发表单提交行为有下面几种方式:
\n提交按钮
"actionType": "submit"
"type": "submit"
的按钮通过设置asyncApi
,当表单提交发送保存接口后,还会继续轮训请求该接口,默认间隔为3秒
,直到返回 finished
属性为 true
才 结束。
如果决定结束轮训的标识字段名不是 finished
,请设置finishedField
属性,比如:"finishedField": "is_success"
配置"type": "reset"
或者"actionType": "reset"
的按钮,可以实现点击重置表单项值。
\n\n请注意:这里的重置是将表单数据域重置到初始状态,而不是清空,如果你配置了初始化接口,那么重置操作是会将表单项重置至初始化表单项值
\n
配置debug:true
可以查看当前表单的数据域数据详情,方便数据映射、表达式等功能调试,如下,你可以修改表单项查看数据域变化
\n\n该配置不会展示完整的数据链,只会展示当前表单的数据域
\n
默认表单是可以获取到完整数据链中的数据的,但是该默认行为不适用于所有场景,例如:
\n在 CRUD 的列表项中配置弹框,弹框中有一个表单,则该表单项中所有的同name
表单项都会根据上层crud
的行数据进行初始化,如果你是实现编辑的功能那并没有是什么问题,但是如果你是新建功能,那么这将不符合你的预期,你可以手动设置"canAccessSuperData": false
来关闭该行为
表单提交成功后,可以执行一些行为。
\n如果想提交表单成功后,重置当前表单至初始状态,可以配置"resetAfterSubmit": true
。
编辑表单项,点击提交,成功后会发现表单项的值会重置到初始状态,即空
\n\n\n注意,如果表单项有默认值,则会将该表单项的值重置至该默认值。
\n
配置redirect
属性,可以指定表单提交成功后要跳转至的页面
配置reload
属性为其他组件name
值,可以在表单提交成功之后,刷新指定组件。
上例中form
提交成功后,会触发name
为my_service
的Service
组件重新请求初始化接口
上面示例是一种组件间联动
\n配置target
属性为目标组件name
值,可以在触发提交行为后,将当前表单的数据域发送给目标组件。
第一个表单在提交时,会将它的表单数据域数据发送给detailForm
表单,触发detailForm
的初始化接口联动,重新请求接口更新数据域,并更新关键字表单项。
表单默认在重置之后(切换页面、弹框中表单关闭表单),会自动清空掉表单中的所有数据,如果你想持久化保留当前表单项的数据而不清空它,那么配置persistData:true
如果想提交成功后,清空该缓存,则配置"clearPersistDataAfterSubmit": true
@todo
\n默认表单项变化时,会即时变化,例如你输入文本,每键入一次,就会触发
\n属性名 | \n类型 | \n默认值 | \n说明 | \n
---|---|---|---|
type | \nstring | \n\n | "form" 指定为 Form 渲染器 | \n
mode | \nstring | \nnormal | \n表单展示方式,可以是:normal 、horizontal 或者 inline | \n
horizontal | \nObject | \n{"left":"col-sm-2", "right":"col-sm-10", "offset":"col-sm-offset-2"} | \n当 mode 为 horizontal 时有用,用来控制 label | \n
title | \nstring | \n"表单" | \nForm 的标题 | \n
submitText | \nString | \n"提交" | \n默认的提交按钮名称,如果设置成空,则可以把默认按钮去掉。 | \n
className | \nstring | \n\n | 外层 Dom 的类名 | \n
controls | \nArray<表单项> | \n\n | Form 表单项集合 | \n
actions | \nArray<表单项> | \n\n | Form 提交按钮,成员为 Action | \n
messages | \nObject | \n\n | 消息提示覆写,默认消息读取的是 API 返回的消息,但是在此可以覆写它。 | \n
messages.fetchSuccess | \nstring | \n\n | 获取成功时提示 | \n
messages.fetchFailed | \nstring | \n\n | 获取失败时提示 | \n
messages.saveSuccess | \nstring | \n\n | 保存成功时提示 | \n
messages.saveFailed | \nstring | \n\n | 保存失败时提示 | \n
wrapWithPanel | \nboolean | \ntrue | \n是否让 Form 用 panel 包起来,设置为 false 后,actions 将无效。 | \n
panelClassName | \nboolean | \ntrue | \n是否让 Form 用 panel 包起来,设置为 false 后,actions 将无效。 | \n
api | \nAPI | \n\n | Form 用来保存数据的 api。 | \n
initApi | \nAPI | \n\n | Form 用来获取初始数据的 api。 | \n
interval | \nnumber | \n3000 | \n刷新时间(最低 3000) | \n
silentPolling | \nboolean | \nfalse | \n配置刷新时是否显示加载动画 | \n
stopAutoRefreshWhen | \nstring | \n"" | \n通过表达式 来配置停止刷新的条件 | \n
initAsyncApi | \nAPI | \n\n | Form 用来获取初始数据的 api,与 initApi 不同的是,会一直轮训请求该接口,直到返回 finished 属性为 true 才 结束。 | \n
initFetch | \nboolean | \ntrue | \n设置了 initApi 或者 initAsyncApi 后,默认会开始就发请求,设置为 false 后就不会起始就请求接口 | \n
initFetchOn | \nstring | \n\n | 用表达式来配置 | \n
initFinishedField | \nstring | \nfinished | \n设置了 initAsyncApi 后,默认会从返回数据的 data.finished 来判断是否完成,也可以设置成其他的 xxx,就会从 data.xxx 中获取 | \n
initCheckInterval | \nnumber | \n3000 | \n设置了 initAsyncApi 以后,默认拉取的时间间隔 | \n
asyncApi | \nAPI | \n\n | 设置此属性后,表单提交发送保存接口后,还会继续轮训请求该接口,直到返回 finished 属性为 true 才 结束。 | \n
checkInterval | \nnumber | \n3000 | \n轮训请求的时间间隔,默认为 3 秒。设置 asyncApi 才有效 | \n
finishedField | \nstring | \n"finished" | \n如果决定结束的字段名不是 finished 请设置此属性,比如 is_success | \n
submitOnChange | \nboolean | \nfalse | \n表单修改即提交 | \n
submitOnInit | \nboolean | \nfalse | \n初始就提交一次 | \n
resetAfterSubmit | \nboolean | \nfalse | \n提交后是否重置表单 | \n
primaryField | \nstring | \n"id" | \n设置主键 id, 当设置后,检测表单是否完成时(asyncApi),只会携带此数据。 | \n
target | \nstring | \n\n | 默认表单提交自己会通过发送 api 保存数据,但是也可以设定另外一个 form 的 name 值,或者另外一个 CRUD 模型的 name 值。 如果 target 目标是一个 Form ,则目标 Form 会重新触发 initApi ,api 可以拿到当前 form 数据。如果目标是一个 CRUD 模型,则目标模型会重新触发搜索,参数为当前 Form 数据。当目标是 window 时,会把当前表单的数据附带到页面地址上。 | \n
redirect | \nstring | \n\n | 设置此属性后,Form 保存成功后,自动跳转到指定页面。支持相对地址,和绝对地址(相对于组内的)。 | \n
reload | \nstring | \n\n | 操作完后刷新目标对象。请填写目标组件设置的 name 值,如果填写为 window 则让当前页面整体刷新。 | \n
autoFocus | \nboolean | \nfalse | \n是否自动聚焦。 | \n
canAccessSuperData | \nboolean | \ntrue | \n指定是否可以自动获取上层的数据并映射到表单项上 | \n
persistData | \nboolean | \ntrue | \n指定表单是否开启本地缓存 | \n
clearPersistDataAfterSubmit | \nboolean | \ntrue | \n指定表单提交成功后是否清除本地缓存 | \n
name | \nstring | \n\n | 设置一个名字后,方便其他组件与其通信 | \n
表单是 amis 中核心组件之一,主要作用是提交或者展示表单数据。
\n最基本的用法是配置 表单项 和 提交接口api
。
如下我们配置姓名和邮箱表单项,并可以填写数据并提交给接口/api/mock2/form/saveForm
。
默认展示模式为文字表单项分行显示
\n\n水平模式,左右摆放,左右比率分配。
\n\n可以配置horizontal
属性,调整偏移量,格式如下:
"horizontal": {\n "left": 2,\n "right": 10,\n "offset": 2\n}\n
\n使用内联模式展现表单项
\n\n使用 group 实现一行显示多个表单项
\n\nForm 默认会在底部渲染一个提交按钮,用于执行表单的提交行为。你可以通过两种方式去掉这个默认的提交按钮:
\n"submitText": ""
"actions": []
同样,你可以通过 actions 属性,配置任意你想要的行为按钮。
\n\n请记住,如果想触发表单提交行为,请配置"actionType": "submit"
或"type": "submit"
按钮
通过配置"wrapWithPanel": false
,可以去掉默认表单边框(包括标题,按钮栏以及边距样式等)。
注意!配置该属性后,title
和actions
属性将失效并无法渲染,请在表单内自行配置。
如果表单项较多导致表单过长,而不方便操作底部的按钮栏,可以配置"affixFooter": true
属性,将底部按钮栏固定在浏览器底部
表单可以通过配置initApi
,实现表单初始化时请求接口,用于展示数据或初始化表单项。
Form 支持轮训初始化接口,步骤如下:
\ninitApi
interval
:单位为ms
,最低值3000
,低于该值按3000
处理如果希望在满足某个条件的情况下停止轮训,配置stopAutoRefreshWhen
表达式。
配置api
属性,当表单执行提交行为时,会默认将当前表单数据域中的数据使用post
方式发送给所配置api
点击提交按钮,会看到发送表单请求,请求数据体为:
\n{\n \"name\": \"xxx\",\n \"email\": \"xxx@xx.com\"\n}\n
\n当你需要配置特定的请求方式,请求体,header
时,使用对象类型 api 配置,并使用 数据映射 进行数据配置。下面示例我们更改了请求方法为PUT
,并在原提交数据的基础上添加一个字段"_from"
。更多用法查看 API 文档 和 数据映射文档
触发表单提交行为有下面几种方式:
\n提交按钮
"actionType": "submit"
"type": "submit"
的按钮通过设置asyncApi
,当表单提交发送保存接口后,还会继续轮训请求该接口,默认间隔为3秒
,直到返回 finished
属性为 true
才 结束。
如果决定结束轮训的标识字段名不是 finished
,请设置finishedField
属性,比如:"finishedField": "is_success"
配置"type": "reset"
或者"actionType": "reset"
的按钮,可以实现点击重置表单项值。
\n\n请注意:这里的重置是将表单数据域重置到初始状态,而不是清空,如果你配置了初始化接口,那么重置操作是会将表单项重置至初始化表单项值
\n
配置debug:true
可以查看当前表单的数据域数据详情,方便数据映射、表达式等功能调试,如下,你可以修改表单项查看数据域变化
\n\n该配置不会展示完整的数据链,只会展示当前表单的数据域
\n
默认表单是可以获取到完整数据链中的数据的,但是该默认行为不适用于所有场景,例如:
\n在 CRUD 的列表项中配置弹框,弹框中有一个表单,则该表单项中所有的同name
表单项都会根据上层crud
的行数据进行初始化,如果你是实现编辑的功能那并没有是什么问题,但是如果你是新建功能,那么这将不符合你的预期,你可以手动设置"canAccessSuperData": false
来关闭该行为
表单提交成功后,可以执行一些行为。
\n如果想提交表单成功后,重置当前表单至初始状态,可以配置"resetAfterSubmit": true
。
编辑表单项,点击提交,成功后会发现表单项的值会重置到初始状态,即空
\n\n\n注意,如果表单项有默认值,则会将该表单项的值重置至该默认值。
\n
配置redirect
属性,可以指定表单提交成功后要跳转至的页面
配置reload
属性为其他组件name
值,可以在表单提交成功之后,刷新指定组件。
上例中form
提交成功后,会触发name
为my_service
的Service
组件重新请求初始化接口
上面示例是一种组件间联动
\n配置target
属性为目标组件name
值,可以在触发提交行为后,将当前表单的数据域发送给目标组件。
第一个表单在提交时,会将它的表单数据域数据发送给detailForm
表单,触发detailForm
的初始化接口联动,重新请求接口更新数据域,并更新关键字表单项。
表单默认在重置之后(切换页面、弹框中表单关闭表单),会自动清空掉表单中的所有数据,如果你想持久化保留当前表单项的数据而不清空它,那么配置persistData:true
如果想提交成功后,清空该缓存,则配置"clearPersistDataAfterSubmit": true
属性名 | \n类型 | \n默认值 | \n说明 | \n
---|---|---|---|
type | \nstring | \n\n | "form" 指定为 Form 渲染器 | \n
name | \nstring | \n\n | 设置一个名字后,方便其他组件与其通信 | \n
mode | \nstring | \nnormal | \n表单展示方式,可以是:normal 、horizontal 或者 inline | \n
horizontal | \nObject | \n{"left":"col-sm-2", "right":"col-sm-10", "offset":"col-sm-offset-2"} | \n当 mode 为 horizontal 时有用,用来控制 label | \n
title | \nstring | \n"表单" | \nForm 的标题 | \n
submitText | \nString | \n"提交" | \n默认的提交按钮名称,如果设置成空,则可以把默认按钮去掉。 | \n
className | \nstring | \n\n | 外层 Dom 的类名 | \n
controls | \nArray<表单项> | \n\n | Form 表单项集合 | \n
actions | \nArray<表单项> | \n\n | Form 提交按钮,成员为 Action | \n
messages | \nObject | \n\n | 消息提示覆写,默认消息读取的是 API 返回的消息,但是在此可以覆写它。 | \n
messages.fetchSuccess | \nstring | \n\n | 获取成功时提示 | \n
messages.fetchFailed | \nstring | \n\n | 获取失败时提示 | \n
messages.saveSuccess | \nstring | \n\n | 保存成功时提示 | \n
messages.saveFailed | \nstring | \n\n | 保存失败时提示 | \n
wrapWithPanel | \nboolean | \ntrue | \n是否让 Form 用 panel 包起来,设置为 false 后,actions 将无效。 | \n
panelClassName | \nboolean | \ntrue | \n是否让 Form 用 panel 包起来,设置为 false 后,actions 将无效。 | \n
api | \nAPI | \n\n | Form 用来保存数据的 api。 | \n
initApi | \nAPI | \n\n | Form 用来获取初始数据的 api。 | \n
interval | \nnumber | \n3000 | \n刷新时间(最低 3000) | \n
silentPolling | \nboolean | \nfalse | \n配置刷新时是否显示加载动画 | \n
stopAutoRefreshWhen | \nstring | \n"" | \n通过表达式 来配置停止刷新的条件 | \n
initAsyncApi | \nAPI | \n\n | Form 用来获取初始数据的 api,与 initApi 不同的是,会一直轮训请求该接口,直到返回 finished 属性为 true 才 结束。 | \n
initFetch | \nboolean | \ntrue | \n设置了 initApi 或者 initAsyncApi 后,默认会开始就发请求,设置为 false 后就不会起始就请求接口 | \n
initFetchOn | \nstring | \n\n | 用表达式来配置 | \n
initFinishedField | \nstring | \nfinished | \n设置了 initAsyncApi 后,默认会从返回数据的 data.finished 来判断是否完成,也可以设置成其他的 xxx,就会从 data.xxx 中获取 | \n
initCheckInterval | \nnumber | \n3000 | \n设置了 initAsyncApi 以后,默认拉取的时间间隔 | \n
asyncApi | \nAPI | \n\n | 设置此属性后,表单提交发送保存接口后,还会继续轮训请求该接口,直到返回 finished 属性为 true 才 结束。 | \n
checkInterval | \nnumber | \n3000 | \n轮训请求的时间间隔,默认为 3 秒。设置 asyncApi 才有效 | \n
finishedField | \nstring | \n"finished" | \n如果决定结束的字段名不是 finished 请设置此属性,比如 is_success | \n
submitOnChange | \nboolean | \nfalse | \n表单修改即提交 | \n
submitOnInit | \nboolean | \nfalse | \n初始就提交一次 | \n
resetAfterSubmit | \nboolean | \nfalse | \n提交后是否重置表单 | \n
primaryField | \nstring | \n"id" | \n设置主键 id, 当设置后,检测表单是否完成时(asyncApi),只会携带此数据。 | \n
target | \nstring | \n\n | 默认表单提交自己会通过发送 api 保存数据,但是也可以设定另外一个 form 的 name 值,或者另外一个 CRUD 模型的 name 值。 如果 target 目标是一个 Form ,则目标 Form 会重新触发 initApi ,api 可以拿到当前 form 数据。如果目标是一个 CRUD 模型,则目标模型会重新触发搜索,参数为当前 Form 数据。当目标是 window 时,会把当前表单的数据附带到页面地址上。 | \n
redirect | \nstring | \n\n | 设置此属性后,Form 保存成功后,自动跳转到指定页面。支持相对地址,和绝对地址(相对于组内的)。 | \n
reload | \nstring | \n\n | 操作完后刷新目标对象。请填写目标组件设置的 name 值,如果填写为 window 则让当前页面整体刷新。 | \n
autoFocus | \nboolean | \nfalse | \n是否自动聚焦。 | \n
canAccessSuperData | \nboolean | \ntrue | \n指定是否可以自动获取上层的数据并映射到表单项上 | \n
persistData | \nboolean | \ntrue | \n指定表单是否开启本地缓存 | \n
clearPersistDataAfterSubmit | \nboolean | \ntrue | \n指定表单提交成功后是否清除本地缓存 | \n
trimValues | \nboolean | \nfalse | \ntrim 当前表单项的每一个值 | \n
tip: 默认 amis 在解析模板字符串时,遇到$
字符会尝试去解析该变量并替换改模板变量,如果你想输出纯文本"${xxx}"
或"$xxx"
,那么需要在$
前加转义字符"\\\\"
,即"\\\\${xxx}"
可以使用.
进行链式取值
在表单提交接口时,amis 默认的请求体数据格式可能不符合你的预期,不用担心,你可以使用数据映射定制想要的数据格式:
\n查看下面这种场景:
\n\n当输入姓名:rick
和邮箱:`rick@gmail.com后,
form` 获取当前的数据域,提交后端接口的数据格式应该是这样的:
{\n \"name\": \"rick\",\n \"email\": \"rick@gmail.com\"\n}\n
\n遗憾的是,你的后端接口只支持的如下的输入数据结构,且无法修改:
\n{\n \"userName\": \"xxx\",\n \"userEmail\": \"xxx@xxx.com\"\n}\n
\n这时,除了直接更改你的 姓名表单项 和 邮箱表单项 的name
属性为相应的字段以外,你可以配置api
的data
属性,使用数据映射轻松实现数据格式的自定义:
你可以查看网络面板,发送给后端接口的数据体应该已经成功修改为:
\n{\n \"userName\": \"rick\",\n \"userEmail\": \"rick@gmail.com\"\n}\n
\n可以使用"&"
,作为数据映射 key,展开所配置的变量,例如:
下面例子中,我们想在提交的时候,除了提交 name
和 email
变量以外,还想添加 c
下面的所有变量 e
,f
,g
,但是按照之前所讲的, api 应该这么配置:
点击提交查看网络面板数据,你会发现数据是符合预期的:
\n{\n \"name\": \"rick\",\n \"email\": \"rick@gmail.comn\",\n \"e\": \"3\",\n \"f\": \"4\",\n \"g\": \"5\"\n}\n
\n但是当变量字段过多的时候,你需要一一映射配置,也许有点麻烦,所以可以使用"&"
标识符,来展开所配置变量:
上例中我们 api.data 配置如下:
\n\"data\": {\n \"name\": \"${name}\",\n \"email\": \"${email}\",\n \"&\": \"${c}\"\n}\n
\n"&"
标识符会将所配置的c
变量的value
值,展开并拼接在data
中。查看网络面板可以看到数据如下:
{\n \"name\": \"rick\",\n \"email\": \"rick@gmail.comn\",\n \"e\": \"3\",\n \"f\": \"4\",\n \"g\": \"5\"\n}\n
\n上例中的api
的data
配置格式如下:
\"data\": {\n \"items\": {\n \"$table\": {\n \"a\": \"${a}\",\n \"c\": \"${c}\"\n }\n }\n}\n
\n这个配置的意思是,只提取table
数组中的a
变量和c
变量,组成新的数组,赋值给items
变量
点击提交,查看浏览器网络面板可以发现,表单的提交数据结构如下:
\n{\n \"items\": [\n {\n \"a\": \"a1\",\n \"c\": \"c1\"\n },\n {\n \"a\": \"a2\",\n \"c\": \"c2\"\n },\n {\n \"a\": \"a3\",\n \"c\": \"c3\"\n }\n ]\n}\n
\n过滤器是对数据映射的一种增强,它的作用是对获取数据做一些处理,基本用法如下:
\n${xxx [ |filter1 |filter2...] }\n
下面我们会逐一介绍每一个过滤器的用法。
\n\n\n过滤器可以 串联使用
\n
用于显示 html 文本。
\n${xxx | html}\n
\n不同场景下,在使用数据映射时,amis 可能默认会使用html
过滤器对数据进行转义显示,这时如果想要输出原始文本,请配置raw
过滤器。
使用raw
可以直接输出原始文本
${xxx | raw}\n
\n\n\n注意!!!
\n\n
raw
过滤器虽然支持显示原始文本,也就意味着可以输出 HTML 片段,但是动态渲染 HTML 是非常危险的,容易导致 XSS 攻击。因此在 使用
\nraw
过滤器的时候,请确保变量的内容可信,且永远不要渲染用户填写的内容。
用于将数据转换为json
格式字符串
${xxx | json[:tabSize]}\n
\n${xxx|json:4} // 指定缩进为4个空格\n
与json相反,用于将json
格式的字符串,转换为javascript
对象
${xxx | toJson}\n
\n对Javascript
的直接输出会显示[object Object]
,你可以使用 json 过滤器 来格式化显示json
文本。
日期格式化过滤器,用于把特定时间值按指定格式输出。
\n${xxx | date[:format][:inputFormat]}\n
'LLL'
,即本地化时间格式'X'
,即时间戳具体参数的配置需要参考 moment
\n\n例如你想将某一个时间值,以 2020-04-14
这样的格式输出,那么查找 moment 文档可知配置格式应为 YYYY-MM-DD
,即:
如果你的数据值默认不是X
格式(即时间戳格式),那么需要配置inputformat
参数用于解析当前时间值,例如:
\n\n注意: 在过滤器参数中使用
\n:
字符,需要在前面加\\\\
转义字符
自动给数字加千分位。
\n${xxx | number}\n
\n把变量值前后多余的空格去掉。
\n${xxx | trim}\n
${xxx | percent[:decimals]}\n
n
位数,默认为0
四舍五入取整
\n${xxx | round[:decimals]}\n
n
位小数,默认为2
当超出若干个字符时,后面的部分直接显示某串字符
\n${xxx | truncate[:length][:mask]}\n
200
"..."
效果同 encodeURIComponent() - JavaScript | MDN
\n${xxx | url_encode}\n
效果同 decodeURIComponent() - JavaScript | MDN
\n${xxx | url_decode}\n
当变量值为空时,显示其他值代替。
\n${xxx | default[:defaultValue]}\n
可以将字符传通过分隔符分离成数组
\n${xxx | split[:delimiter]}\n
,
当变量值是数组时,可以把内容连接起来。
\n${xxx | join[:glue]}\n
空字符
获取数组中的第一个值
\n${xxx | first}\n
\n获取数组中的最后一个值
\n${xxx | last}\n
\n获取数组中的第n
个值
${xxx | nth[:nth]}\n
注意: nth 配置0
为获取第一个元素。
获取对象或数组中符合条件的筛选值
\n${xxx | pick[:path]}\n
&
,即返回原数据@todo
\n秒值格式化成时间格式
\n${xxx | duration}\n
\n将数据包成数组
\n${xxx | asArray}\n
\n将字符串转小写
\n${xxx | lowerCase}\n
\n将字符串转大写
\n${xxx | upperCase}\n
\nbase64 加密
\n${xxx | base64Encode}\n
\nbase64 解密
\n${xxx | base64Decode}\n
\n真值条件过滤器
\n${xxx | isTrue[:trueValue][:falseValue]\n
\n\n\n\n配置
\ntrueValue
和falseValue
时,如果想要返回当前数据域中某个变量的值,那么参数可以直接配置变量名而不需要在两边添加引号;如果想返回某字符串,那么需要给参数两边添加单引号或双引号,例如
\n${xxx|isTrue:'foo':bar}
,当xxx
变量为真,那么会返回 字符串'foo'
,如果不为真,那么返回数据域中 变量bar
的值。
参数中不添加引号,可以直接返回数据域中变量值
\n\n假值条件过滤器
\n${xxx | isFalse[:falseValue][:trueValue]\n
用法与 isTrue 过滤器 相同,判断逻辑相反
\n模糊匹配条件过滤器
\n${xxx | isMatch[:matchParam][:trueValue][:falseValue]\n
参数中不添加引号,可以直接返回数据域中变量值
\n\n${xxx | notMatch[:matchParam][:trueValue][:falseValue]\n
用法与 isMatch 相同,判断逻辑相反。
\n全等匹配过滤器
\n${xxx | isEquals[:equalsValue][:trueValue][:falseValue]\n
参数中不添加引号,可以直接返回数据域中变量值
\n\n不全等匹配过滤器
\n${xxx | notEquals[:equalsValue][:trueValue][:falseValue]\n
用法与 isEquals 相同,判断逻辑相反。
\n过滤数组,操作对象为数组,当目标对象不是数组时将无效。
\n${xxx | filter[:keys][:directive][:arg1]}\n
isTrue
目标值为真通过筛选。isFalse
目标值为假时通过筛选。match
模糊匹配后面的参数。${xxx|filter:a,b:match:keywords}
表示 xxx 里面的成员,如果字段 a 或者 字段 b 模糊匹配 keywords 变量的值,则通过筛选。equals
相对于模糊匹配,这个就相对精确匹配了,用法跟 match
一样。arg1: 字符串或变量名
\n比如: ${xxx|filter:readonly:isTrue}
将 xxx 数组中 readonly 为 true 的成员提取出来。\n再来个栗子:${xxx|filter:a,b:match:keywords}
将 xxx 数组中成员变量 a 或者 b 的值与环境中 keywords 的值相匹配的提取出来。如果不需要取变量,也可以写固定值如:${xxx|filter:a,b:match:'123'}
使用单一的过滤器可能无法满足你的所有需求,幸运的是 amis 支持串联使用过滤器,而前一个过滤器的值会作为下一个过滤器的入参,进行下一步处理。语法如下:
\n${xxx|filter1|filter2|...}\n
上例子中${value|split|first}
,会经历下面几个步骤:
split
过滤器,将字符串a,b,c
,拆分成数组["a", "b", "c"]
;first
,执行该过滤器,获取数组第一个元素,为"a"
"a"
数据映射支持用户通过${xxx}
或$xxx
获取当前数据链中某个变量的值,实现灵活的数据配置功能,主要用于模板字符串、 自定义 api
请求数据体格式等场景。
tip: 默认 amis 在解析模板字符串时,遇到$
字符会尝试去解析该变量并替换改模板变量,如果你想输出纯文本"${xxx}"
或"$xxx"
,那么需要在$
前加转义字符"\\\\"
,即"\\\\${xxx}"
可以使用.
进行链式取值
在表单提交接口时,amis 默认的请求体数据格式可能不符合你的预期,不用担心,你可以使用数据映射定制想要的数据格式:
\n查看下面这种场景:
\n\n当输入姓名:rick
和邮箱:`rick@gmail.com后,
form` 获取当前的数据域,提交后端接口的数据格式应该是这样的:
{\n \"name\": \"rick\",\n \"email\": \"rick@gmail.com\"\n}\n
\n遗憾的是,你的后端接口只支持的如下的输入数据结构,且无法修改:
\n{\n \"userName\": \"xxx\",\n \"userEmail\": \"xxx@xxx.com\"\n}\n
\n这时,除了直接更改你的 姓名表单项 和 邮箱表单项 的name
属性为相应的字段以外,你可以配置api
的data
属性,使用数据映射轻松实现数据格式的自定义:
你可以查看网络面板,发送给后端接口的数据体应该已经成功修改为:
\n{\n \"userName\": \"rick\",\n \"userEmail\": \"rick@gmail.com\"\n}\n
\n可以使用"&"
,作为数据映射 key,展开所配置的变量,例如:
下面例子中,我们想在提交的时候,除了提交 name
和 email
变量以外,还想添加 c
下面的所有变量 e
,f
,g
,但是按照之前所讲的, api 应该这么配置:
点击提交查看网络面板数据,你会发现数据是符合预期的:
\n{\n \"name\": \"rick\",\n \"email\": \"rick@gmail.comn\",\n \"e\": \"3\",\n \"f\": \"4\",\n \"g\": \"5\"\n}\n
\n但是当变量字段过多的时候,你需要一一映射配置,也许有点麻烦,所以可以使用"&"
标识符,来展开所配置变量:
上例中我们 api.data 配置如下:
\n\"data\": {\n \"name\": \"${name}\",\n \"email\": \"${email}\",\n \"&\": \"${c}\"\n}\n
\n"&"
标识符会将所配置的c
变量的value
值,展开并拼接在data
中。查看网络面板可以看到数据如下:
{\n \"name\": \"rick\",\n \"email\": \"rick@gmail.comn\",\n \"e\": \"3\",\n \"f\": \"4\",\n \"g\": \"5\"\n}\n
\n上例中的api
的data
配置格式如下:
\"data\": {\n \"items\": {\n \"$table\": {\n \"a\": \"${a}\",\n \"c\": \"${c}\"\n }\n }\n}\n
\n这个配置的意思是,只提取table
数组中的a
变量和c
变量,组成新的数组,赋值给items
变量
点击提交,查看浏览器网络面板可以发现,表单的提交数据结构如下:
\n{\n \"items\": [\n {\n \"a\": \"a1\",\n \"c\": \"c1\"\n },\n {\n \"a\": \"a2\",\n \"c\": \"c2\"\n },\n {\n \"a\": \"a3\",\n \"c\": \"c3\"\n }\n ]\n}\n
\n过滤器是对数据映射的一种增强,它的作用是对获取数据做一些处理,基本用法如下:
\n${xxx [ |filter1 |filter2...] }\n
下面我们会逐一介绍每一个过滤器的用法。
\n\n\n过滤器可以 串联使用
\n
用于显示 html 文本。
\n${xxx | html}\n
\n不同场景下,在使用数据映射时,amis 可能默认会使用html
过滤器对数据进行转义显示,这时如果想要输出原始文本,请配置raw
过滤器。
使用raw
可以直接输出原始文本
${xxx | raw}\n
\n\n\n注意!!!
\n\n
raw
过滤器虽然支持显示原始文本,也就意味着可以输出 HTML 片段,但是动态渲染 HTML 是非常危险的,容易导致 XSS 攻击。因此在 使用
\nraw
过滤器的时候,请确保变量的内容可信,且永远不要渲染用户填写的内容。
用于将数据转换为json
格式字符串
${xxx | json[:tabSize]}\n
\n${xxx|json:4} // 指定缩进为4个空格\n
与json相反,用于将json
格式的字符串,转换为javascript
对象
${xxx | toJson}\n
\n对Javascript
的直接输出会显示[object Object]
,你可以使用 json 过滤器 来格式化显示json
文本。
日期格式化过滤器,用于把特定时间值按指定格式输出。
\n${xxx | date[:format][:inputFormat]}\n
'LLL'
,即本地化时间格式'X'
,即时间戳具体参数的配置需要参考 moment
\n\n例如你想将某一个时间值,以 2020-04-14
这样的格式输出,那么查找 moment 文档可知配置格式应为 YYYY-MM-DD
,即:
如果你的数据值默认不是X
格式(即时间戳格式),那么需要配置inputformat
参数用于解析当前时间值,例如:
\n\n注意: 在过滤器参数中使用
\n:
字符,需要在前面加\\\\
转义字符
自动给数字加千分位。
\n${xxx | number}\n
\n把变量值前后多余的空格去掉。
\n${xxx | trim}\n
${xxx | percent[:decimals]}\n
n
位数,默认为0
四舍五入取整
\n${xxx | round[:decimals]}\n
n
位小数,默认为2
当超出若干个字符时,后面的部分直接显示某串字符
\n${xxx | truncate[:length][:mask]}\n
200
"..."
效果同 encodeURIComponent() - JavaScript | MDN
\n${xxx | url_encode}\n
效果同 decodeURIComponent() - JavaScript | MDN
\n${xxx | url_decode}\n
当变量值为空时,显示其他值代替。
\n${xxx | default[:defaultValue]}\n
可以将字符传通过分隔符分离成数组
\n${xxx | split[:delimiter]}\n
,
当变量值是数组时,可以把内容连接起来。
\n${xxx | join[:glue]}\n
空字符
获取数组中的第一个值
\n${xxx | first}\n
\n获取数组中的最后一个值
\n${xxx | last}\n
\n获取数组中的第n
个值
${xxx | nth[:nth]}\n
注意: nth 配置0
为获取第一个元素。
获取对象或数组中符合条件的筛选值
\n${xxx | pick[:path]}\n
&
,即返回原数据秒值格式化成时间格式
\n${xxx | duration}\n
\n将数据包成数组
\n${xxx | asArray}\n
\n将字符串转小写
\n${xxx | lowerCase}\n
\n将字符串转大写
\n${xxx | upperCase}\n
\nbase64 加密
\n${xxx | base64Encode}\n
\nbase64 解密
\n${xxx | base64Decode}\n
\n真值条件过滤器
\n${xxx | isTrue[:trueValue][:falseValue]\n
\n\n\n\n配置
\ntrueValue
和falseValue
时,如果想要返回当前数据域中某个变量的值,那么参数可以直接配置变量名而不需要在两边添加引号;如果想返回某字符串,那么需要给参数两边添加单引号或双引号,例如
\n${xxx|isTrue:'foo':bar}
,当xxx
变量为真,那么会返回 字符串'foo'
,如果不为真,那么返回数据域中 变量bar
的值。
参数中不添加引号,可以直接返回数据域中变量值
\n\n假值条件过滤器
\n${xxx | isFalse[:falseValue][:trueValue]\n
用法与 isTrue 过滤器 相同,判断逻辑相反
\n模糊匹配条件过滤器
\n${xxx | isMatch[:matchParam][:trueValue][:falseValue]\n
参数中不添加引号,可以直接返回数据域中变量值
\n\n${xxx | notMatch[:matchParam][:trueValue][:falseValue]\n
用法与 isMatch 相同,判断逻辑相反。
\n全等匹配过滤器
\n${xxx | isEquals[:equalsValue][:trueValue][:falseValue]\n
参数中不添加引号,可以直接返回数据域中变量值
\n\n不全等匹配过滤器
\n${xxx | notEquals[:equalsValue][:trueValue][:falseValue]\n
用法与 isEquals 相同,判断逻辑相反。
\n过滤数组,操作对象为数组,当目标对象不是数组时将无效。
\n${xxx | filter[:keys][:directive][:arg1]}\n
isTrue
目标值为真通过筛选。isFalse
目标值为假时通过筛选。match
模糊匹配后面的参数。${xxx|filter:a,b:match:keywords}
表示 xxx 里面的成员,如果字段 a 或者 字段 b 模糊匹配 keywords 变量的值,则通过筛选。equals
相对于模糊匹配,这个就相对精确匹配了,用法跟 match
一样。arg1: 字符串或变量名
\n比如: ${xxx|filter:readonly:isTrue}
将 xxx 数组中 readonly 为 true 的成员提取出来。\n再来个栗子:${xxx|filter:a,b:match:keywords}
将 xxx 数组中成员变量 a 或者 b 的值与环境中 keywords 的值相匹配的提取出来。如果不需要取变量,也可以写固定值如:${xxx|filter:a,b:match:'123'}
使用单一的过滤器可能无法满足你的所有需求,幸运的是 amis 支持串联使用过滤器,而前一个过滤器的值会作为下一个过滤器的入参,进行下一步处理。语法如下:
\n${xxx|filter1|filter2|...}\n
上例子中${value|split|first}
,会经历下面几个步骤:
split
过滤器,将字符串a,b,c
,拆分成数组["a", "b", "c"]
;first
,执行该过滤器,获取数组第一个元素,为"a"
"a"