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.
45 lines
1.0 KiB
45 lines
1.0 KiB
import GLOBAL from './global';
|
|
class Observer {
|
|
constructor() {
|
|
this._event = {}
|
|
}
|
|
$on(eventName, handler) {
|
|
if (this._event[eventName]) {
|
|
this._event[eventName].push(handler)
|
|
} else {
|
|
this._event[eventName] = [handler]
|
|
}
|
|
}
|
|
|
|
$emit(eventName) {
|
|
let events = this._event[eventName]
|
|
let otherArgs = Array.prototype.slice.call(arguments, 1)
|
|
let that = this
|
|
if (events) {
|
|
events.forEach(event => {
|
|
event.apply(that, otherArgs)
|
|
})
|
|
}
|
|
}
|
|
$off(eventName, handler) {
|
|
let events = this._event[eventName]
|
|
if (events) {
|
|
this._event[eventName] = events.filter(event => {
|
|
return event !== handler
|
|
})
|
|
}
|
|
}
|
|
$once(eventName, handler) {
|
|
let that = this
|
|
function func() {
|
|
let args = Array.prototype.slice.call(arguments, 0)
|
|
handler.apply(that, args)
|
|
this.off(eventName, func)
|
|
}
|
|
this.on(eventName, func)
|
|
}
|
|
}
|
|
if (!GLOBAL.observer) {
|
|
GLOBAL.observer = new Observer()
|
|
}
|
|
export default GLOBAL.observer
|
|
|