UNPKG

vue-amap

Version:
59 lines (52 loc) 1.82 kB
let eventHelper; class EventHelper { constructor() { /** * listener has表 * { * instance: { * eventName: [...handlers] * } * } */ this._listener = new Map(); } addListener(instance, eventName, handler, context) { if (!AMap.event) throw new Error('please wait for Map API load'); let listener = AMap.event.addListener(instance, eventName, handler, context); if (!this._listener.get(instance)) this._listener.set(instance, {}); let listenerMap = this._listener.get(instance); if (!listenerMap[eventName]) listenerMap[eventName] = []; listenerMap[eventName].push(listener); } removeListener(instance, eventName, handler) { if (!AMap.event) throw new Error('please wait for Map API load'); if (!this._listener.get(instance) || !this._listener.get(instance)[eventName]) return; let listenerArr = this._listener.get(instance)[eventName]; if (handler) { let l_index = listenerArr.indexOf(handler); AMap.event.removeListener(listenerArr[l_index]); listenerArr.splice(l_index, 1); } else { listenerArr.forEach(listener => { AMap.event.removeListener(listener); }); this._listener.get(instance)[eventName] = []; } } addListenerOnce(instance, eventName, handler, context) { return AMap.event.addListenerOnce(instance, eventName, handler, context); } trigger(instance, eventName, args) { return AMap.event.trigger(instance, eventName, args); } clearListeners(instance) { let listeners = this._listener.get(instance); if (!listeners) return; Object.keys(listeners).map(eventName => { this.removeListener(instance, eventName); }); } }; eventHelper = eventHelper || new EventHelper(); export default eventHelper;