跳到主要内容

事件

在 Storyboard 中可以为构件配置事件的处理,例如:

brick: "your-brick"
events:
something.happened:
action: "console.warn"
others.happened:
- action: "console.log"
- target: "#other-brick"
method: "openModal"

对于以上配置,在构件 <your-brick> 发起 something.happened 事件时,将触发内建处理函数 console.warn;而在发起 others.happened 事件时,将依次触发内建函数 console.log、找到 id="other-brick" 的构件并调用它的 openModal() 方法。

构件的事件处理器主要有三种:内建处理器、Provider 处理器、自定义构件处理器。

内建处理器

使用 action: "..." 来配置内建处理器,使用 args: [...] 设置传递给处理器的参数。

当前内建处理器主要有以下几类:

内建处理器:history.*

更多信息请参考 History 会话历史

Action
history.push
history.replace
history.goBack
history.goForward
history.pushQuery
history.replaceQuery
history.pushAnchor
history.reload
history.block
history.unblock

内建处理器:location.*

ActionArgumentsdescription
location.reload-浏览器刷新页面
location.assignurl: string浏览器跳转页面,例如 `${BASE_URL}${PATH_NAME}?q=any`

内建处理器:window.*

ActionArgumentsdescription
window.openurl: string, target: string打开页面(注意:需要自行按需使用 BASE_URL 补上 /next 的前缀)
window.postMessagedata: unknown, origin?: string发送消息

内建处理器:event.*

ActionArgumentsdescription
event.preventDefault-阻止事件的默认行为

内建处理器:console.*

ActionArgumentsdescription
console.logany-
console.errorany-
console.warnany-
console.infoany-

内建处理器:message.*

ActionArgumentsdescription
message.successstring成功提示
message.errorstring失败提示
message.warnstring告警提示
message.infostring信息提示

内建处理器:handleHttpError

ActionArgumentsdescription
handleHttpError-请求报错弹框提示

内建处理器:context.*

context.* 接收两个参数:context name 和 context value。更多信息请参考 Context 上下文。注意:不能对绑定构件属性的 Context 执行 context.* 操作。

ActionArgumentsdescription
context.assignname: string, newValue: any使用 Object.assign() 更新已有的 Context 值
context.replacename: string, newValue: any使用新的值替换已有的 Context 值
context.loadname: string主动加载一个懒加载的 Context
context.refreshname: string强制更新一个异步的 Context

内建处理器:state.*

state.* 接收两个参数:state name 和 state value。更多信息请参考 Template State 模板状态数据

ActionArgumentsdescription
state.updatename: string, newValue: any使用新的值替换已有的 State 值
state.loadname: string主动加载一个懒加载的 State
state.refreshname: string强制更新一个异步的 State

内建处理器:localStorage.*

localStorage 存储的信息,支持写入数据(setItem)方法和移除项(removeItem)方法。

需要获取数据的时候使用表达式:<% LOCAL_STORAGE.getItem("your-key") %>

ActionArgumentsdescription
localStorage.setItemkey: string, value: anylocalStorage 中写入一项数据
localStorage.removeItemkey: stringlocalStorage 中移除项

内建处理器:sessionStorage.*

sessionStorage 存储的信息,支持写入数据(setItem)方法和移除项(removeItem)方法。

需要获取数据的时候使用表达式:<% SESSION_STORAGE.getItem("your-key") %>

ActionArgumentsdescription
sessionStorage.setItemkey: string, value: anysessionStorage 中写入一项数据
sessionStorage.removeItemkey: stringsessionStorage 中移除项

内建处理器:tpl.*

tpl.dispatchEvent 可以用于在 Custom Template 自定义模板内部定义的 useBrick 中以 Custom Template 的名义对外发送事件。

它触发时将使用该构件所属的 Custom Template 作为事件源发送自定义事件,第一个参数为新的事件类型名,第二个参数是 CustomEventInit,可以包装新的 detail 数据。。

ActionArgumentsdescription
tpl.dispatchEventeventType: string, init: CustomEventInit使用构件所属的 Custom Template 作为事件源发送自定义事件

Provider 处理器

使用 useProvider 指定要使用的 Provider 构件名,并通过 callback 来处理 Provider 调用后的结果。

Fieldtyperequireddefaultdescription
useProviderstring✔️-Provider 构件名
argsany[]--调用构件方法时传递的参数,不填则将原始事件本身作为唯一参数传入
callback{ success, error, finally, progress }--执行 Provider 构件的 resolve(...args) 后的异步回调,更多信息请参考 Provider 异步回调
pollProviderPollOptions--启用轮询模式,更多信息请参考 Provider 轮询

自定义构件处理器

自定义构件处理器让构件的事件可以传递给其它指定构件,执行指定构件的方法或设置指定构件的属性。

自定义构件处理器:执行指定构件方法

Fieldtyperequireddefaultdescription
targetstring✔️-接收事件的构件的 css selector
multiplebool-false是否查询多个构件(querySelectorAll),而不是单个构件(querySelector
methodstring✔️-想要调用的构件的方法名
argsany[]-[event]调用构件方法时传递的参数,不填则将原始事件本身作为唯一参数传入
callback{ success, error, finally }--执行 method 后的异步回调,更多信息请参考 Provider 异步回调

自定义构件处理器:设置指定构件属性

Fieldtyperequireddefaultdescription
targetstring✔️-接收事件的构件的 css selector
multiplebool-false是否查询多个构件(querySelectorAll),而不是单个构件(querySelector
propertiesobject--想要设置模板构件的属性字典

条件判断

在事件处理器中可以配置 if 字段,以根据事件信息决定是否执行相关事件处理。它的使用方式和条件渲染大体相似,例如:

events:
button.click:
if: "<% EVENT.detail.length > 0 %>"
action: history.push

变更历史

组件版本变更
brick_next3.18.9支持 window.postMessage