提交 f6280541 编写于 作者: DCloud-WZF's avatar DCloud-WZF 💬

feat(mp): add initUnknownHooks

上级 c2696d7b
...@@ -69,6 +69,35 @@ export function initHooks (mpOptions, hooks, vueOptions) { ...@@ -69,6 +69,35 @@ export function initHooks (mpOptions, hooks, vueOptions) {
}) })
} }
export function initUnknownHooks (mpOptions, vueOptions, excludes = []) {
findHooks(vueOptions).forEach((hook) => initHook(mpOptions, hook, excludes))
}
function findHooks (vueOptions, hooks = []) {
if (vueOptions) {
Object.keys(vueOptions).forEach((name) => {
if (name.indexOf('on') === 0 && isFn(vueOptions[name])) {
hooks.push(name)
}
})
}
return hooks
}
function initHook (mpOptions, hook, excludes) {
if (excludes.indexOf(hook) === -1 && !hasOwn(mpOptions, hook)) {
mpOptions[hook] = function (args) {
if (
(__PLATFORM__ === 'mp-toutiao' || __PLATFORM__ === 'mp-lark') &&
hook === 'onError'
) {
return getApp().$vm.$callHook(hook, args)
}
return this.$vm && this.$vm.__call_hook(hook, args)
}
}
}
export function initVueComponent (Vue, vueOptions) { export function initVueComponent (Vue, vueOptions) {
vueOptions = vueOptions.default || vueOptions vueOptions = vueOptions.default || vueOptions
let VueComponent let VueComponent
......
...@@ -7,6 +7,7 @@ import { ...@@ -7,6 +7,7 @@ import {
import { import {
initData, initData,
initHooks, initHooks,
initUnknownHooks,
handleEvent, handleEvent,
initBehaviors, initBehaviors,
initVueComponent, initVueComponent,
...@@ -93,6 +94,7 @@ export default function parsePage (vuePageOptions) { ...@@ -93,6 +94,7 @@ export default function parsePage (vuePageOptions) {
} }
initHooks(pageOptions, hooks, vuePageOptions) initHooks(pageOptions, hooks, vuePageOptions)
initUnknownHooks(pageOptions, vuePageOptions)
if (Array.isArray(vueOptions.wxsCallMethods)) { if (Array.isArray(vueOptions.wxsCallMethods)) {
vueOptions.wxsCallMethods.forEach(callMethod => { vueOptions.wxsCallMethods.forEach(callMethod => {
......
...@@ -2,6 +2,7 @@ import Vue from 'vue' ...@@ -2,6 +2,7 @@ import Vue from 'vue'
import { import {
initHooks, initHooks,
initUnknownHooks,
initMocks initMocks
} from 'uni-wrapper/util' } from 'uni-wrapper/util'
...@@ -190,6 +191,7 @@ export default function parseBaseApp (vm, { ...@@ -190,6 +191,7 @@ export default function parseBaseApp (vm, {
initAppLocale(Vue, vm, normalizeLocale(__GLOBAL__.getSystemInfoSync().language) || LOCALE_EN) initAppLocale(Vue, vm, normalizeLocale(__GLOBAL__.getSystemInfoSync().language) || LOCALE_EN)
initHooks(appOptions, hooks) initHooks(appOptions, hooks)
initUnknownHooks(appOptions, vm.$options)
return appOptions return appOptions
} }
...@@ -4,6 +4,7 @@ import { ...@@ -4,6 +4,7 @@ import {
import { import {
initHooks, initHooks,
initUnknownHooks,
PAGE_EVENT_HOOKS PAGE_EVENT_HOOKS
} from 'uni-wrapper/util' } from 'uni-wrapper/util'
...@@ -27,6 +28,7 @@ export default function parseBasePage (vuePageOptions, { ...@@ -27,6 +28,7 @@ export default function parseBasePage (vuePageOptions, {
}) })
initHooks(pageOptions.methods, hooks, vuePageOptions) initHooks(pageOptions.methods, hooks, vuePageOptions)
initUnknownHooks(pageOptions.methods, vuePageOptions)
pageOptions.methods.onLoad = function (query) { pageOptions.methods.onLoad = function (query) {
this.options = query this.options = query
...@@ -40,4 +42,4 @@ export default function parseBasePage (vuePageOptions, { ...@@ -40,4 +42,4 @@ export default function parseBasePage (vuePageOptions, {
} }
return pageOptions return pageOptions
} }
...@@ -7,6 +7,7 @@ import { ...@@ -7,6 +7,7 @@ import {
import { import {
initData, initData,
initHooks, initHooks,
initUnknownHooks,
handleEvent, handleEvent,
initBehaviors, initBehaviors,
initVueComponent, initVueComponent,
...@@ -80,6 +81,7 @@ export default function parsePage (vuePageOptions) { ...@@ -80,6 +81,7 @@ export default function parsePage (vuePageOptions) {
} }
initHooks(pageOptions, hooks, vuePageOptions) initHooks(pageOptions, hooks, vuePageOptions)
initUnknownHooks(pageOptions, vuePageOptions)
if (Array.isArray(vueOptions.wxsCallMethods)) { if (Array.isArray(vueOptions.wxsCallMethods)) {
vueOptions.wxsCallMethods.forEach(callMethod => { vueOptions.wxsCallMethods.forEach(callMethod => {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册