From d80ed2c2cab92fa02362e417e4cdd7ca97fd67f6 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Wed, 12 Jun 2019 20:15:08 +0800 Subject: [PATCH] fix(mp): improve hasHook #300 --- packages/uni-app-plus/dist/index.js | 37 +++++++++++++++++---------- packages/uni-app-plus/package.json | 2 +- packages/uni-mp-alipay/dist/index.js | 37 +++++++++++++++++---------- packages/uni-mp-alipay/package.json | 2 +- packages/uni-mp-baidu/dist/index.js | 26 ++++++++++++------- packages/uni-mp-baidu/package.json | 2 +- packages/uni-mp-qq/dist/index.js | 37 +++++++++++++++++---------- packages/uni-mp-qq/package.json | 2 +- packages/uni-mp-toutiao/dist/index.js | 37 +++++++++++++++++---------- packages/uni-mp-toutiao/package.json | 2 +- packages/uni-mp-weixin/dist/index.js | 37 +++++++++++++++++---------- packages/uni-mp-weixin/package.json | 2 +- src/core/runtime/wrapper/util.js | 26 ++++++++++++------- 13 files changed, 160 insertions(+), 89 deletions(-) diff --git a/packages/uni-app-plus/dist/index.js b/packages/uni-app-plus/dist/index.js index 0895c6511..0735b0aac 100644 --- a/packages/uni-app-plus/dist/index.js +++ b/packages/uni-app-plus/dist/index.js @@ -436,13 +436,21 @@ function initMocks (vm, mocks) { function hasHook (hook, vueOptions) { if (!vueOptions) { return true - } - - vueOptions = vueOptions.default || vueOptions; - - if (isFn(vueOptions)) { - vueOptions = vueOptions.extendOptions; - } + } + + vueOptions = vueOptions.default || vueOptions; + + if (isFn(vueOptions)) { + if (isFn(vueOptions.extendOptions[hook])) { + return true + } + if (vueOptions.super && + vueOptions.super.options && + Array.isArray(vueOptions.super.options[hook])) { + return true + } + return false + } if (isFn(vueOptions[hook])) { return true @@ -455,13 +463,13 @@ function hasHook (hook, vueOptions) { function initHooks (mpOptions, hooks, vueOptions) { hooks.forEach(hook => { - if (hasHook(hook, vueOptions)) { + if (hasHook(hook, vueOptions)) { mpOptions[hook] = function (args) { return this.$vm && this.$vm.__call_hook(hook, args) }; } }); -} +} function initVueComponent (Vue$$1, vueOptions) { vueOptions = vueOptions.default || vueOptions; @@ -867,18 +875,18 @@ function handleEvent (event) { }); } -const hooks = [ +const hooks = [ 'onShow', 'onHide', 'onError', 'onPageNotFound' ]; -function parseBaseApp (vm, { +function parseBaseApp (vm, { mocks, initRefs -}) { - Vue.prototype.mpHost = "app-plus"; +}) { + Vue.prototype.mpHost = "app-plus"; Vue.mixin({ beforeCreate () { @@ -907,6 +915,9 @@ function parseBaseApp (vm, { const appOptions = { onLaunch (args) { + if (this.$vm) { // 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前 + return + } this.$vm = vm; diff --git a/packages/uni-app-plus/package.json b/packages/uni-app-plus/package.json index d7ad897db..672adabbc 100644 --- a/packages/uni-app-plus/package.json +++ b/packages/uni-app-plus/package.json @@ -1,6 +1,6 @@ { "name": "@dcloudio/uni-app-plus", - "version": "0.0.242", + "version": "0.0.243", "description": "uni-app app-plus", "main": "dist/index.js", "scripts": { diff --git a/packages/uni-mp-alipay/dist/index.js b/packages/uni-mp-alipay/dist/index.js index ff4299896..0fbfdb73c 100644 --- a/packages/uni-mp-alipay/dist/index.js +++ b/packages/uni-mp-alipay/dist/index.js @@ -755,13 +755,21 @@ function initMocks (vm, mocks) { function hasHook (hook, vueOptions) { if (!vueOptions) { return true - } - - vueOptions = vueOptions.default || vueOptions; - - if (isFn(vueOptions)) { - vueOptions = vueOptions.extendOptions; - } + } + + vueOptions = vueOptions.default || vueOptions; + + if (isFn(vueOptions)) { + if (isFn(vueOptions.extendOptions[hook])) { + return true + } + if (vueOptions.super && + vueOptions.super.options && + Array.isArray(vueOptions.super.options[hook])) { + return true + } + return false + } if (isFn(vueOptions[hook])) { return true @@ -774,13 +782,13 @@ function hasHook (hook, vueOptions) { function initHooks (mpOptions, hooks, vueOptions) { hooks.forEach(hook => { - if (hasHook(hook, vueOptions)) { + if (hasHook(hook, vueOptions)) { mpOptions[hook] = function (args) { return this.$vm && this.$vm.__call_hook(hook, args) }; } }); -} +} function initVueComponent (Vue$$1, vueOptions) { vueOptions = vueOptions.default || vueOptions; @@ -1176,18 +1184,18 @@ function handleEvent (event) { }); } -const hooks = [ +const hooks = [ 'onShow', 'onHide', 'onError', 'onPageNotFound' ]; -function parseBaseApp (vm, { +function parseBaseApp (vm, { mocks, initRefs -}) { - Vue.prototype.mpHost = "mp-alipay"; +}) { + Vue.prototype.mpHost = "mp-alipay"; Vue.mixin({ beforeCreate () { @@ -1216,6 +1224,9 @@ function parseBaseApp (vm, { const appOptions = { onLaunch (args) { + if (this.$vm) { // 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前 + return + } this.$vm = vm; diff --git a/packages/uni-mp-alipay/package.json b/packages/uni-mp-alipay/package.json index 805c7ee69..4f28d7015 100644 --- a/packages/uni-mp-alipay/package.json +++ b/packages/uni-mp-alipay/package.json @@ -1,6 +1,6 @@ { "name": "@dcloudio/uni-mp-alipay", - "version": "0.0.816", + "version": "0.0.817", "description": "uni-app mp-alipay", "main": "dist/index.js", "scripts": { diff --git a/packages/uni-mp-baidu/dist/index.js b/packages/uni-mp-baidu/dist/index.js index 3a0dcb668..986be9a1e 100644 --- a/packages/uni-mp-baidu/dist/index.js +++ b/packages/uni-mp-baidu/dist/index.js @@ -536,13 +536,21 @@ function initMocks (vm, mocks) { function hasHook (hook, vueOptions) { if (!vueOptions) { return true - } - - vueOptions = vueOptions.default || vueOptions; - - if (isFn(vueOptions)) { - vueOptions = vueOptions.extendOptions; - } + } + + vueOptions = vueOptions.default || vueOptions; + + if (isFn(vueOptions)) { + if (isFn(vueOptions.extendOptions[hook])) { + return true + } + if (vueOptions.super && + vueOptions.super.options && + Array.isArray(vueOptions.super.options[hook])) { + return true + } + return false + } if (isFn(vueOptions[hook])) { return true @@ -555,13 +563,13 @@ function hasHook (hook, vueOptions) { function initHooks (mpOptions, hooks, vueOptions) { hooks.forEach(hook => { - if (hasHook(hook, vueOptions)) { + if (hasHook(hook, vueOptions)) { mpOptions[hook] = function (args) { return this.$vm && this.$vm.__call_hook(hook, args) }; } }); -} +} function initVueComponent (Vue$$1, vueOptions) { vueOptions = vueOptions.default || vueOptions; diff --git a/packages/uni-mp-baidu/package.json b/packages/uni-mp-baidu/package.json index 8d25a71c9..8393c09ab 100644 --- a/packages/uni-mp-baidu/package.json +++ b/packages/uni-mp-baidu/package.json @@ -1,6 +1,6 @@ { "name": "@dcloudio/uni-mp-baidu", - "version": "0.0.843", + "version": "0.0.844", "description": "uni-app mp-baidu", "main": "dist/index.js", "scripts": { diff --git a/packages/uni-mp-qq/dist/index.js b/packages/uni-mp-qq/dist/index.js index 58ee21ae7..4e95168f7 100644 --- a/packages/uni-mp-qq/dist/index.js +++ b/packages/uni-mp-qq/dist/index.js @@ -500,13 +500,21 @@ function initMocks (vm, mocks) { function hasHook (hook, vueOptions) { if (!vueOptions) { return true - } - - vueOptions = vueOptions.default || vueOptions; - - if (isFn(vueOptions)) { - vueOptions = vueOptions.extendOptions; - } + } + + vueOptions = vueOptions.default || vueOptions; + + if (isFn(vueOptions)) { + if (isFn(vueOptions.extendOptions[hook])) { + return true + } + if (vueOptions.super && + vueOptions.super.options && + Array.isArray(vueOptions.super.options[hook])) { + return true + } + return false + } if (isFn(vueOptions[hook])) { return true @@ -519,13 +527,13 @@ function hasHook (hook, vueOptions) { function initHooks (mpOptions, hooks, vueOptions) { hooks.forEach(hook => { - if (hasHook(hook, vueOptions)) { + if (hasHook(hook, vueOptions)) { mpOptions[hook] = function (args) { return this.$vm && this.$vm.__call_hook(hook, args) }; } }); -} +} function initVueComponent (Vue$$1, vueOptions) { vueOptions = vueOptions.default || vueOptions; @@ -931,18 +939,18 @@ function handleEvent (event) { }); } -const hooks = [ +const hooks = [ 'onShow', 'onHide', 'onError', 'onPageNotFound' ]; -function parseBaseApp (vm, { +function parseBaseApp (vm, { mocks, initRefs -}) { - Vue.prototype.mpHost = "mp-qq"; +}) { + Vue.prototype.mpHost = "mp-qq"; Vue.mixin({ beforeCreate () { @@ -971,6 +979,9 @@ function parseBaseApp (vm, { const appOptions = { onLaunch (args) { + if (this.$vm) { // 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前 + return + } this.$vm = vm; diff --git a/packages/uni-mp-qq/package.json b/packages/uni-mp-qq/package.json index 8a909f402..bdc311d73 100644 --- a/packages/uni-mp-qq/package.json +++ b/packages/uni-mp-qq/package.json @@ -1,6 +1,6 @@ { "name": "@dcloudio/uni-mp-qq", - "version": "0.0.100", + "version": "0.0.101", "description": "uni-app mp-qq", "main": "dist/index.js", "scripts": { diff --git a/packages/uni-mp-toutiao/dist/index.js b/packages/uni-mp-toutiao/dist/index.js index c8ad8c95f..ab662aeb5 100644 --- a/packages/uni-mp-toutiao/dist/index.js +++ b/packages/uni-mp-toutiao/dist/index.js @@ -581,13 +581,21 @@ function initMocks (vm, mocks) { function hasHook (hook, vueOptions) { if (!vueOptions) { return true - } - - vueOptions = vueOptions.default || vueOptions; - - if (isFn(vueOptions)) { - vueOptions = vueOptions.extendOptions; - } + } + + vueOptions = vueOptions.default || vueOptions; + + if (isFn(vueOptions)) { + if (isFn(vueOptions.extendOptions[hook])) { + return true + } + if (vueOptions.super && + vueOptions.super.options && + Array.isArray(vueOptions.super.options[hook])) { + return true + } + return false + } if (isFn(vueOptions[hook])) { return true @@ -600,13 +608,13 @@ function hasHook (hook, vueOptions) { function initHooks (mpOptions, hooks, vueOptions) { hooks.forEach(hook => { - if (hasHook(hook, vueOptions)) { + if (hasHook(hook, vueOptions)) { mpOptions[hook] = function (args) { return this.$vm && this.$vm.__call_hook(hook, args) }; } }); -} +} function initVueComponent (Vue$$1, vueOptions) { vueOptions = vueOptions.default || vueOptions; @@ -1012,18 +1020,18 @@ function handleEvent (event) { }); } -const hooks = [ +const hooks = [ 'onShow', 'onHide', 'onError', 'onPageNotFound' ]; -function parseBaseApp (vm, { +function parseBaseApp (vm, { mocks, initRefs -}) { - Vue.prototype.mpHost = "mp-toutiao"; +}) { + Vue.prototype.mpHost = "mp-toutiao"; Vue.mixin({ beforeCreate () { @@ -1052,6 +1060,9 @@ function parseBaseApp (vm, { const appOptions = { onLaunch (args) { + if (this.$vm) { // 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前 + return + } this.$vm = vm; diff --git a/packages/uni-mp-toutiao/package.json b/packages/uni-mp-toutiao/package.json index d2ef67fea..22fd97432 100644 --- a/packages/uni-mp-toutiao/package.json +++ b/packages/uni-mp-toutiao/package.json @@ -1,6 +1,6 @@ { "name": "@dcloudio/uni-mp-toutiao", - "version": "0.0.340", + "version": "0.0.341", "description": "uni-app mp-toutiao", "main": "dist/index.js", "scripts": { diff --git a/packages/uni-mp-weixin/dist/index.js b/packages/uni-mp-weixin/dist/index.js index 1d5da1d32..e1d27e9b7 100644 --- a/packages/uni-mp-weixin/dist/index.js +++ b/packages/uni-mp-weixin/dist/index.js @@ -438,13 +438,21 @@ function initMocks (vm, mocks) { function hasHook (hook, vueOptions) { if (!vueOptions) { return true - } - - vueOptions = vueOptions.default || vueOptions; - - if (isFn(vueOptions)) { - vueOptions = vueOptions.extendOptions; - } + } + + vueOptions = vueOptions.default || vueOptions; + + if (isFn(vueOptions)) { + if (isFn(vueOptions.extendOptions[hook])) { + return true + } + if (vueOptions.super && + vueOptions.super.options && + Array.isArray(vueOptions.super.options[hook])) { + return true + } + return false + } if (isFn(vueOptions[hook])) { return true @@ -457,13 +465,13 @@ function hasHook (hook, vueOptions) { function initHooks (mpOptions, hooks, vueOptions) { hooks.forEach(hook => { - if (hasHook(hook, vueOptions)) { + if (hasHook(hook, vueOptions)) { mpOptions[hook] = function (args) { return this.$vm && this.$vm.__call_hook(hook, args) }; } }); -} +} function initVueComponent (Vue$$1, vueOptions) { vueOptions = vueOptions.default || vueOptions; @@ -869,18 +877,18 @@ function handleEvent (event) { }); } -const hooks = [ +const hooks = [ 'onShow', 'onHide', 'onError', 'onPageNotFound' ]; -function parseBaseApp (vm, { +function parseBaseApp (vm, { mocks, initRefs -}) { - Vue.prototype.mpHost = "mp-weixin"; +}) { + Vue.prototype.mpHost = "mp-weixin"; Vue.mixin({ beforeCreate () { @@ -909,6 +917,9 @@ function parseBaseApp (vm, { const appOptions = { onLaunch (args) { + if (this.$vm) { // 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前 + return + } { if (!wx.canIUse('nextTick')) { // 事实 上2.2.3 即可,简单使用 2.3.0 的 nextTick 判断 console.error('当前微信基础库版本过低,请将 微信开发者工具-详情-项目设置-调试基础库版本 更换为`2.3.0`以上'); diff --git a/packages/uni-mp-weixin/package.json b/packages/uni-mp-weixin/package.json index d2f66ba44..f59fe4098 100644 --- a/packages/uni-mp-weixin/package.json +++ b/packages/uni-mp-weixin/package.json @@ -1,6 +1,6 @@ { "name": "@dcloudio/uni-mp-weixin", - "version": "0.0.961", + "version": "0.0.962", "description": "uni-app mp-weixin", "main": "dist/index.js", "scripts": { diff --git a/src/core/runtime/wrapper/util.js b/src/core/runtime/wrapper/util.js index 29c70323b..6f73dc4b3 100644 --- a/src/core/runtime/wrapper/util.js +++ b/src/core/runtime/wrapper/util.js @@ -26,13 +26,21 @@ export function initMocks (vm, mocks) { function hasHook (hook, vueOptions) { if (!vueOptions) { return true - } - - vueOptions = vueOptions.default || vueOptions - - if (isFn(vueOptions)) { - vueOptions = vueOptions.extendOptions - } + } + + vueOptions = vueOptions.default || vueOptions + + if (isFn(vueOptions)) { + if (isFn(vueOptions.extendOptions[hook])) { + return true + } + if (vueOptions.super && + vueOptions.super.options && + Array.isArray(vueOptions.super.options[hook])) { + return true + } + return false + } if (isFn(vueOptions[hook])) { return true @@ -45,13 +53,13 @@ function hasHook (hook, vueOptions) { export function initHooks (mpOptions, hooks, vueOptions) { hooks.forEach(hook => { - if (hasHook(hook, vueOptions)) { + 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 -- GitLab