自定义组件时,如何设置交互事件的输出变量
操作场景
实现逻辑
- 自定义组件开发过程如下,也可以直接单击下载链接,获取自定义组件示例包“SelectWidget.zip”。
- 在组件的“global_SelectWidget.editor.js”文件中,新增eventConfig配置。
eventConfig其实是一个对象,里面包含组件触发的自定义事件、自定义事件的说明以及事件对外输出的变量名、变量含义。
eventConfig: { sendSelect: { desc: { zh_CN: "下拉框选中值发生变化", en_US: "Select Change" }, fields: [ { name: "selectValue", desc: { zh_CN: "选中值", en_US: "selected value" }, }, ], }, },
表1 SelectWidget.zip字段说明 字段名
字段说明
sendSelect
自定义的事件名为“sendSelect”,必须配置。
须知:需要在组件“.js”文件逻辑代码中,使用“Studio.registerEvents()”方法注册该事件,并使用“thisObj.triggerEvent()”方法触发该事件。
desc
事件的中英文描述,可描述事件的具体场景、作用,必须配置。
fields
变量列表,必须配置,即事件对外输出的变量集合,包含变量名、描述等,必须配置。
fields[0].name
表示变量名,例如“selectValue”。
须知:在组件“.js”文件逻辑代码中,使用“thisObj.triggerEvent()”方法触发该事件时,要将变量字段传入发送的data中。
fields[0].desc
变量的中英文描述,可选配置。
“Studio.registerEvents()”和“thisObj.triggerEvent()”为AstroZero预置的API,相关说明请参见高级或AstroCanvas页面组件中预置的API。
- 在组件的“global_SelectWidget.js”文件中,注册名称为“sendSelect”的事件。
var global_SelectWidget = StudioWidgetWrapper.extend({ /* * Triggered when initializing a widget and will have the code that invokes rendering of the widget */ init: function () { var thisObj = this; thisObj._super.apply(thisObj, arguments); thisObj.render(); if (typeof Studio != "undefined" && Studio) { Studio.registerEvents( thisObj, "sendSelect", { zh_CN: "选中值发生变化时触发", en_US: "Select Choose" }, [] ); } },
- 在组件的“global_SelectWidget.ftl”文件中,定义选中值发生变化时绑定sendSelect事件。
示例代码如下:
<el-select v-model="selectConfObj.selectValue" :disabled="selectConfObj.disabled" @change="sendSelect" :placeholder="selectConfObj.placeholder" filterable popper-class="selectWidget"> <el-option v-for="item in selectConfObj.options" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select>
- 在组件的“global_SelectWidget.js”文件中,触发名称为“sendSelect”的事件,且data中包含在1.a中定义的fields字段名“selectValue”。
示例代码如下:
sendSelect: function () { var params = { selectValue: this.selectConfObj.selectValue, }; thisObj.triggerEvent("sendSelect", params); };
- 在组件的“global_SelectWidget.editor.js”文件中,新增eventConfig配置。
- 参考上传自定义组件中操作,将组件包“SelectWidget.zip”上传到组件库,场景选择“大屏&PC端”或“移动端”。
- 测试组件。
- 在页面中,拖入该组件。
图2 拖入组件
- 在组件上方单击,配置组件交互事件。
- 单击“交互事件”,选择“选中值发生变化时触发”事件,单击“响应动作”,选择“赋值全局变量”,在“赋值到变量”下拉框中单击“新建全局变量”,新建全局变量“status”,将事件的输出变量(如“selectValue”)赋值给页面级的全局变量“status”,单击“确定”后,单击“完成”。
图3 设置交互事件
- 在页面中,拖入该组件。