From f6280541897ba98e427fd365654863c13ccac816 Mon Sep 17 00:00:00 2001 From: zhenyuWang <13641039885@163.com> Date: Tue, 16 Aug 2022 16:08:59 +0800 Subject: [PATCH] feat(mp): add initUnknownHooks --- src/core/runtime/wrapper/util.js | 29 +++++++++++++++++++ .../mp-alipay/runtime/wrapper/page-parser.js | 2 ++ .../runtime/wrapper/app-base-parser.js | 2 ++ .../runtime/wrapper/page-base-parser.js | 4 ++- .../mp-xhs/runtime/wrapper/page-parser.js | 2 ++ 5 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/core/runtime/wrapper/util.js b/src/core/runtime/wrapper/util.js index 5e409ba9f..7b53ef481 100644 --- a/src/core/runtime/wrapper/util.js +++ b/src/core/runtime/wrapper/util.js @@ -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) { vueOptions = vueOptions.default || vueOptions let VueComponent diff --git a/src/platforms/mp-alipay/runtime/wrapper/page-parser.js b/src/platforms/mp-alipay/runtime/wrapper/page-parser.js index 756a6534f..69f3997b4 100644 --- a/src/platforms/mp-alipay/runtime/wrapper/page-parser.js +++ b/src/platforms/mp-alipay/runtime/wrapper/page-parser.js @@ -7,6 +7,7 @@ import { import { initData, initHooks, + initUnknownHooks, handleEvent, initBehaviors, initVueComponent, @@ -93,6 +94,7 @@ export default function parsePage (vuePageOptions) { } initHooks(pageOptions, hooks, vuePageOptions) + initUnknownHooks(pageOptions, vuePageOptions) if (Array.isArray(vueOptions.wxsCallMethods)) { vueOptions.wxsCallMethods.forEach(callMethod => { diff --git a/src/platforms/mp-weixin/runtime/wrapper/app-base-parser.js b/src/platforms/mp-weixin/runtime/wrapper/app-base-parser.js index d8659b99c..762c3c740 100644 --- a/src/platforms/mp-weixin/runtime/wrapper/app-base-parser.js +++ b/src/platforms/mp-weixin/runtime/wrapper/app-base-parser.js @@ -2,6 +2,7 @@ import Vue from 'vue' import { initHooks, + initUnknownHooks, initMocks } from 'uni-wrapper/util' @@ -190,6 +191,7 @@ export default function parseBaseApp (vm, { initAppLocale(Vue, vm, normalizeLocale(__GLOBAL__.getSystemInfoSync().language) || LOCALE_EN) initHooks(appOptions, hooks) + initUnknownHooks(appOptions, vm.$options) return appOptions } 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 7d908d9f0..71f57dfb3 100644 --- a/src/platforms/mp-weixin/runtime/wrapper/page-base-parser.js +++ b/src/platforms/mp-weixin/runtime/wrapper/page-base-parser.js @@ -4,6 +4,7 @@ import { import { initHooks, + initUnknownHooks, PAGE_EVENT_HOOKS } from 'uni-wrapper/util' @@ -27,6 +28,7 @@ export default function parseBasePage (vuePageOptions, { }) initHooks(pageOptions.methods, hooks, vuePageOptions) + initUnknownHooks(pageOptions.methods, vuePageOptions) pageOptions.methods.onLoad = function (query) { this.options = query @@ -40,4 +42,4 @@ export default function parseBasePage (vuePageOptions, { } return pageOptions -} +} diff --git a/src/platforms/mp-xhs/runtime/wrapper/page-parser.js b/src/platforms/mp-xhs/runtime/wrapper/page-parser.js index f60f8f69e..de62a01c0 100644 --- a/src/platforms/mp-xhs/runtime/wrapper/page-parser.js +++ b/src/platforms/mp-xhs/runtime/wrapper/page-parser.js @@ -7,6 +7,7 @@ import { import { initData, initHooks, + initUnknownHooks, handleEvent, initBehaviors, initVueComponent, @@ -80,6 +81,7 @@ export default function parsePage (vuePageOptions) { } initHooks(pageOptions, hooks, vuePageOptions) + initUnknownHooks(pageOptions, vuePageOptions) if (Array.isArray(vueOptions.wxsCallMethods)) { vueOptions.wxsCallMethods.forEach(callMethod => { -- GitLab