diff --git a/src/core/runtime/wrapper/util.js b/src/core/runtime/wrapper/util.js index 03b92ca15d13ccb247ea684e3549da140a0a4e0b..29c70323b7f4142c622a3a29dafac0680a654bee 100644 --- a/src/core/runtime/wrapper/util.js +++ b/src/core/runtime/wrapper/util.js @@ -23,13 +23,35 @@ export function initMocks (vm, mocks) { }) } -export function initHooks (mpOptions, hooks) { +function hasHook (hook, vueOptions) { + if (!vueOptions) { + return true + } + + vueOptions = vueOptions.default || vueOptions + + if (isFn(vueOptions)) { + vueOptions = vueOptions.extendOptions + } + + if (isFn(vueOptions[hook])) { + return true + } + const mixins = vueOptions.mixins + if (Array.isArray(mixins)) { + return !!mixins.find(mixin => hasHook(hook, mixin)) + } +} + +export function initHooks (mpOptions, hooks, vueOptions) { hooks.forEach(hook => { - mpOptions[hook] = function (args) { - return this.$vm && this.$vm.__call_hook(hook, args) + if (hasHook(hook, vueOptions)) { + mpOptions[hook] = function (args) { + return this.$vm && this.$vm.__call_hook(hook, args) + } } }) -} +} export function initVueComponent (Vue, vueOptions) { vueOptions = vueOptions.default || vueOptions diff --git a/src/platforms/mp-weixin/runtime/wrapper/page-base-parser.js b/src/platforms/mp-weixin/runtime/wrapper/page-base-parser.js index 2b9bd682597fe6f0f486d566055cc8611fa469df..6464fedcf011302e0bd9937130c3d8a8dc07138c 100644 --- a/src/platforms/mp-weixin/runtime/wrapper/page-base-parser.js +++ b/src/platforms/mp-weixin/runtime/wrapper/page-base-parser.js @@ -22,7 +22,7 @@ export default function parseBasePage (vuePageOptions, { initRelation }) - initHooks(pageOptions.methods, hooks) + initHooks(pageOptions.methods, hooks, vuePageOptions) pageOptions.methods.onLoad = function (args) { this.$vm.$mp.query = args // 兼容 mpvue