事件
EaseAdmin
前后端都支持事件机制,用于在应用程序中触发和监听事件。
前端事件
前端事件是由 amis
提供支持,用于在前端监听交互事件。更多事件动作请参考 amis 事件动作 说明
通过 onEvent
属性实现渲染器事件与响应动作的绑定。onEvent
内配置事件和动作映射关系,actions
是事件对应的响应动作的集合。
amis('page').body([
amis('button')
.label('尝试点击、鼠标移入/移出')
.level('primary')
.onEvent('click', [
amis('event').actionType('toast').args({ msgType: 'info', msg: '派发点击事件' }),
])
.onEvent('mouseenter', [
amis('event').actionType('toast').args({ msgType: 'info', msg: '派发鼠标移入事件' }),
])
.onEvent('mouseleave', [
amis('event').actionType('toast').args({ msgType: 'info', msg: '派发鼠标移出事件' }),
]),
])
发送 HTTP
请求
amis('page')
.data({ name: 'lll' })
.body([
amis('button')
.label('发送 Ajax 请求')
.level('primary')
.confirmText('确认要发出这个请求?')
.onEvent('click', [
amis('event')
.actionType('ajax')
.attr('api', {
url: 'https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/mock2/form/saveForm?name=${name}',
method: 'post',
responseData: { resId: '${id}' },
messages: { success: '成功了!欧耶', failed: '失败了呢。。' },
})
.data({ age: 18 }),
amis('event')
.actionType('toast')
.expression('${event.data.responseResult.responseStatus === 0}')
.args({ msg: '${event.data.responseResult|json}' }),
]),
])
跳转链接
amis('page')
.body([
amis('button')
.label('Baidu')
.level('primary')
.onEvent('click', [
amis('event')
.actionType('url')
.args({
url: 'http://www.baidu.com'
}),
]),
])
执行 Javascript
amis('page').body([
amis('button')
.label('run js')
.level('primary')
.onEvent('click', [
amis('event')
.actionType('custom')
.attr(
'script',
"alert('javascript running')"
),
]),
])
后端事件
后端事件是由 adonisjs
提供支持,用于在后端监听和触发事件。更多事件请参考 adonisjs 事件机制 说明
事件监听器定义在此 start/events.ts
文件中。您可以使用 make:preload
命令创建此文件。
node ace make:preload events
您必须使用 emitter.on
监听事件。该方法接受事件名称作为第一个参数,监听器作为第二个参数。
import emitter from '@adonisjs/core/services/emitter'
emitter.on('user:registered', function (user) {
console.log(user)
})
定义事件监听器后,即可使用 emitter.emit
方法来触发 user:registered
事件。该方法将事件名称作为第一个参数,将事件数据作为第二个参数。
import emitter from '@adonisjs/core/services/emitter'
export default class UsersController {
async store() {
const user = await User.create(data)
emitter.emit('user:registered', user)
}
}
您可以使用 emitter.once
来监听一次事件。
emitter.once('user:registered', function (user) {
console.log(user)
})