import {
|
cached,
|
camelize
|
} from 'uni-shared'
|
import { markMPComponent } from './wrapper/util'
|
|
const MPPage = Page
|
const MPComponent = Component
|
|
const customizeRE = /:/g
|
|
const customize = cached((str) => {
|
return camelize(str.replace(customizeRE, '-'))
|
})
|
|
function initTriggerEvent (mpInstance) {
|
const oldTriggerEvent = mpInstance.triggerEvent
|
const newTriggerEvent = function (event, ...args) {
|
// 事件名统一转驼峰格式,仅处理:当前组件为 vue 组件、当前组件为 vue 组件子组件
|
if (this.$vm || (this.dataset && this.dataset.comType)) {
|
event = customize(event)
|
} else if (__PLATFORM__ === 'mp-weixin' || __PLATFORM__ === 'mp-qq') {
|
// 针对微信/QQ小程序单独补充驼峰格式事件,以兼容历史项目
|
const newEvent = customize(event)
|
if (newEvent !== event) {
|
oldTriggerEvent.apply(this, [newEvent, ...args])
|
}
|
}
|
return oldTriggerEvent.apply(this, [event, ...args])
|
}
|
try {
|
// 京东小程序 triggerEvent 为只读
|
mpInstance.triggerEvent = newTriggerEvent
|
} catch (error) {
|
mpInstance._triggerEvent = newTriggerEvent
|
}
|
}
|
|
function initHook (name, options, isComponent) {
|
if (__PLATFORM__ === 'mp-toutiao') {
|
// fix by Lxh 字节自定义组件Component构造器文档上写有created,但是实测只触发了lifetimes上的created
|
isComponent && options.lifetimes && options.lifetimes[name] && (options = options.lifetimes)
|
}
|
const oldHook = options[name]
|
options[name] = function (...args) {
|
markMPComponent(this)
|
initTriggerEvent(this)
|
if (oldHook) {
|
return oldHook.apply(this, args)
|
}
|
}
|
}
|
if (!MPPage.__$wrappered) {
|
MPPage.__$wrappered = true
|
Page = function (options = {}) {
|
initHook('onLoad', options)
|
return MPPage(options)
|
}
|
Page.after = MPPage.after
|
|
Component = function (options = {}) {
|
initHook('created', options, true)
|
return MPComponent(options)
|
}
|
}
|