这是基于vue-vben-admin 模板适用于abp Vnext的前端管理项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

59 lines
1.3 KiB

import { Component, Vue } from 'vue-property-decorator'
/**
* 封装领域事件组件
* 提供简单的防重复订阅以及组件销毁自动注销事件功能
*/
@Component
export default class EventBusMiXin extends Vue {
protected eventMap = new Array<string>()
/**
* 组件销毁事件
* 注销所有事件
*/
destroyed() {
this.$events.removeAll()
this.eventMap.length = 0
}
/**
* 订阅事件
* @param name 事件名称
* @param callback 回调函数
*/
protected subscribe(name: string, callback: (eventData: any) => void) {
if (this.eventMap.includes(name)) {
return
}
this.eventMap.push(name)
this.$events.on(name, callback)
}
/**
* 订阅事件一次
* @param name 事件名称
* @param callback 回调函数
*/
protected subscribeOne(name: string, callback: (eventData: any) => void) {
this.$events.once(name, callback)
}
/**
* 注销订阅事件
* @param name 事件名称
* @param callback 注销回调
*/
protected unSubscribe(name: string) {
this.$events.off(name, undefined)
}
/**
* 触发事件
* @param name 事件名称
* @param args 事件参数列表
*/
protected trigger(name: string, ...args: any[]) {
this.$events.emit(name, args)
}
}