import { vd } from './data' export function initEvent (Vue) { // 部分组件内部使用了$page Object.defineProperty(Vue.prototype, '$page', { get () { return getCurrentPages()[0].$page } }) Vue.prototype.$handleVModelEvent = function (nid, value) { vd.sendUIEvent(this._$id, nid, { type: 'input', target: { value } }) } Vue.prototype.$handleViewEvent = function ($vueEvent, options = {}) { // const isCustomEvent = $vueEvent._processed // 自定义事件已提前处理过 if (options.stop) { $vueEvent.stopPropagation() } if (options.prevent) { $vueEvent.preventDefault() } const $event = this.$handleEvent($vueEvent) const cid = this._$id const currentTarget = $vueEvent.$origCurrentTarget || $vueEvent.currentTarget // 当自定义组件根节点触发事件时,nid 补充前缀,避免与组件内部 nid 冲突(根组件page不需要) const nid = ((currentTarget === this.$el && this.$options.mpType !== 'page') ? 'r-' : '') + $event.options.nid if (typeof nid === 'undefined') { return console.error(`[${cid}] nid not found`) } // 移除无用属性 delete $event._processed delete $event.mp delete $event.preventDefault delete $event.stopPropagation delete $event.options delete $event.$origCurrentTarget // 实时发送,延迟的话,会导致 touch 类事件被合并,影响实际业务逻辑,比如 touchstart 中修改变量为 true,touchend 修改为 false vd.sendUIEvent(cid, nid, $event) } }