From cdbb30318c1024d5964d0c556c4ee3d02eecf360 Mon Sep 17 00:00:00 2001 From: qiang Date: Tue, 27 Sep 2022 16:34:37 +0800 Subject: [PATCH] fix: init lifetimes hook use ExtendedVue options --- src/core/runtime/wrapper/util.js | 2 +- .../app-plus/runtime/wrapper/component-parser.js | 8 ++++---- .../mp-alipay/runtime/wrapper/component-parser.js | 4 ++-- .../mp-alipay/runtime/wrapper/page-parser.js | 6 +++--- .../mp-baidu/runtime/wrapper/component-parser.js | 8 ++++---- .../mp-baidu/runtime/wrapper/page-parser.js | 10 +--------- .../mp-jd/runtime/wrapper/component-parser.js | 6 +++--- .../runtime/wrapper/component-parser.js | 6 +++--- .../mp-lark/runtime/wrapper/component-parser.js | 9 ++++++--- .../mp-lark/runtime/wrapper/page-parser.js | 9 ++------- .../mp-qq/runtime/wrapper/component-parser.js | 6 +++--- .../mp-toutiao/runtime/wrapper/component-parser.js | 9 ++++++--- .../mp-toutiao/runtime/wrapper/page-parser.js | 9 ++------- .../runtime/wrapper/component-base-parser.js | 5 ++++- .../mp-weixin/runtime/wrapper/component-parser.js | 6 +++--- .../mp-weixin/runtime/wrapper/page-base-parser.js | 14 ++++---------- .../mp-weixin/runtime/wrapper/page-parser.js | 12 ++---------- .../mp-xhs/runtime/wrapper/component-parser.js | 6 +++--- .../mp-xhs/runtime/wrapper/page-parser.js | 4 ++-- .../runtime/wrapper/component-parser.js | 11 +++++++---- .../runtime/wrapper/page-parser.js | 9 ++------- 21 files changed, 67 insertions(+), 92 deletions(-) diff --git a/src/core/runtime/wrapper/util.js b/src/core/runtime/wrapper/util.js index ec1a8ba36..4a93a1e87 100644 --- a/src/core/runtime/wrapper/util.js +++ b/src/core/runtime/wrapper/util.js @@ -50,7 +50,7 @@ function hasHook (hook, vueOptions) { return false } - if (isFn(vueOptions[hook])) { + if (isFn(vueOptions[hook]) || Array.isArray(vueOptions[hook])) { return true } const mixins = vueOptions.mixins diff --git a/src/platforms/app-plus/runtime/wrapper/component-parser.js b/src/platforms/app-plus/runtime/wrapper/component-parser.js index 9c2411f85..f0f2119f2 100644 --- a/src/platforms/app-plus/runtime/wrapper/component-parser.js +++ b/src/platforms/app-plus/runtime/wrapper/component-parser.js @@ -1,10 +1,10 @@ import parseBaseComponent from '../../../mp-weixin/runtime/wrapper/component-parser' -export default function parseComponent (vueComponentOptions) { - const componentOptions = parseBaseComponent(vueComponentOptions) +export default function parseComponent (vueComponentOptions, needVueOptions) { + const [componentOptions, vueOptions] = parseBaseComponent(vueComponentOptions, true) componentOptions.methods.$getAppWebview = function () { return plus.webview.getWebviewById(`${this.__wxWebviewId__}`) } - return componentOptions -} + return needVueOptions ? [componentOptions, vueOptions] : componentOptions +} diff --git a/src/platforms/mp-alipay/runtime/wrapper/component-parser.js b/src/platforms/mp-alipay/runtime/wrapper/component-parser.js index 9cc232f0b..dda935c2d 100644 --- a/src/platforms/mp-alipay/runtime/wrapper/component-parser.js +++ b/src/platforms/mp-alipay/runtime/wrapper/component-parser.js @@ -101,7 +101,7 @@ function initVm (VueComponent) { } } -export default function parseComponent (vueComponentOptions) { +export default function parseComponent (vueComponentOptions, needVueOptions) { const [VueComponent, vueOptions] = initVueComponent(Vue, vueComponentOptions) const properties = initProperties(vueOptions.props, false, vueOptions.__file) @@ -164,5 +164,5 @@ export default function parseComponent (vueComponentOptions) { }) } - return componentOptions + return needVueOptions ? [componentOptions, vueOptions] : componentOptions } diff --git a/src/platforms/mp-alipay/runtime/wrapper/page-parser.js b/src/platforms/mp-alipay/runtime/wrapper/page-parser.js index 53ce02bbe..f6e1af47a 100644 --- a/src/platforms/mp-alipay/runtime/wrapper/page-parser.js +++ b/src/platforms/mp-alipay/runtime/wrapper/page-parser.js @@ -93,10 +93,10 @@ export default function parsePage (vuePageOptions) { triggerEvent } - Object.assign(pageOptions.events, vuePageOptions.events || {}) + Object.assign(pageOptions.events, vueOptions.events || {}) - initHooks(pageOptions, hooks, vuePageOptions) - initUnknownHooks(pageOptions, vuePageOptions, ['onReady']) + initHooks(pageOptions, hooks, vueOptions) + initUnknownHooks(pageOptions, vueOptions, ['onReady']) if (Array.isArray(vueOptions.wxsCallMethods)) { vueOptions.wxsCallMethods.forEach(callMethod => { diff --git a/src/platforms/mp-baidu/runtime/wrapper/component-parser.js b/src/platforms/mp-baidu/runtime/wrapper/component-parser.js index cda77ff06..552a7f219 100644 --- a/src/platforms/mp-baidu/runtime/wrapper/component-parser.js +++ b/src/platforms/mp-baidu/runtime/wrapper/component-parser.js @@ -25,11 +25,11 @@ import parseBaseComponent from '../../../mp-weixin/runtime/wrapper/component-bas const newLifecycle = swan.canIUse('lifecycle-2-0') -export default function parseComponent (vueOptions) { - const componentOptions = parseBaseComponent(vueOptions, { +export default function parseComponent (vueComponentOptions, needVueOptions) { + const [componentOptions, vueOptions] = parseBaseComponent(vueComponentOptions, { isPage, initRelation - }) + }, true) // 关于百度小程序生命周期的说明(组件作为页面时): // lifetimes:attached --> methods:onShow --> methods:onLoad --> methods:onReady @@ -90,5 +90,5 @@ export default function parseComponent (vueOptions) { } delete componentOptions.methods.__l - return componentOptions + return needVueOptions ? [componentOptions, vueOptions] : componentOptions } diff --git a/src/platforms/mp-baidu/runtime/wrapper/page-parser.js b/src/platforms/mp-baidu/runtime/wrapper/page-parser.js index fec3bddfe..440f71b94 100644 --- a/src/platforms/mp-baidu/runtime/wrapper/page-parser.js +++ b/src/platforms/mp-baidu/runtime/wrapper/page-parser.js @@ -2,11 +2,6 @@ import { stringifyQuery } from 'uni-shared/query' -import { - isPage, - initRelation -} from './util' - import parseBasePage from '../../../mp-weixin/runtime/wrapper/page-base-parser' function detached ($vm) { @@ -24,10 +19,7 @@ function onPageUnload ($vm) { } export default function parsePage (vuePageOptions) { - const pageOptions = parseBasePage(vuePageOptions, { - isPage, - initRelation - }) + const pageOptions = parseBasePage(vuePageOptions) // 纠正百度小程序生命周期methods:onShow在methods:onLoad之前触发的问题 pageOptions.methods.onShow = function onShow () { diff --git a/src/platforms/mp-jd/runtime/wrapper/component-parser.js b/src/platforms/mp-jd/runtime/wrapper/component-parser.js index 26dbc9c54..9cc940331 100644 --- a/src/platforms/mp-jd/runtime/wrapper/component-parser.js +++ b/src/platforms/mp-jd/runtime/wrapper/component-parser.js @@ -1,11 +1,11 @@ import parseBaseComponent from '../../../mp-weixin/runtime/wrapper/component-parser' -export default function parseComponent (vueComponentOptions) { - const componentOptions = parseBaseComponent(vueComponentOptions) +export default function parseComponent (vueComponentOptions, needVueOptions) { + const [componentOptions, vueOptions] = parseBaseComponent(vueComponentOptions, true) // 京东小程序 lifetimes 存在兼容问题 const lifetimes = componentOptions.lifetimes Object.keys(lifetimes).forEach(key => { componentOptions[key] = lifetimes[key] }) - return componentOptions + return needVueOptions ? [componentOptions, vueOptions] : componentOptions } diff --git a/src/platforms/mp-kuaishou/runtime/wrapper/component-parser.js b/src/platforms/mp-kuaishou/runtime/wrapper/component-parser.js index fd3ebae87..20de85916 100644 --- a/src/platforms/mp-kuaishou/runtime/wrapper/component-parser.js +++ b/src/platforms/mp-kuaishou/runtime/wrapper/component-parser.js @@ -7,8 +7,8 @@ import { fixSetDataEnd } from '../../../mp-weixin/runtime/wrapper/fix-set-data' -export default function parseComponent (vueComponentOptions) { - const componentOptions = parseBaseComponent(vueComponentOptions) +export default function parseComponent (vueComponentOptions, needVueOptions) { + const [componentOptions, vueOptions] = parseBaseComponent(vueComponentOptions, true) const oldAttached = componentOptions.lifetimes.attached componentOptions.lifetimes.attached = function attached () { // 暂不区分版本 @@ -21,5 +21,5 @@ export default function parseComponent (vueComponentOptions) { } oldAttached.call(this) } - return componentOptions + return needVueOptions ? [componentOptions, vueOptions] : componentOptions } diff --git a/src/platforms/mp-lark/runtime/wrapper/component-parser.js b/src/platforms/mp-lark/runtime/wrapper/component-parser.js index 9d78729c8..0353bb3e9 100644 --- a/src/platforms/mp-lark/runtime/wrapper/component-parser.js +++ b/src/platforms/mp-lark/runtime/wrapper/component-parser.js @@ -11,8 +11,11 @@ import { import parseBaseComponent from '../../../mp-weixin/runtime/wrapper/component-base-parser' -export default function parseComponent (vueOptions) { - const [componentOptions, VueComponent] = parseBaseComponent(vueOptions) +export default function parseComponent (vueComponentOptions, needVueOptions) { + const [componentOptions, vueOptions, VueComponent] = parseBaseComponent(vueComponentOptions, { + isPage, + initRelation + }, true) componentOptions.lifetimes.attached = function attached () { const properties = this.properties @@ -46,5 +49,5 @@ export default function parseComponent (vueOptions) { componentOptions.methods.__l = handleLink - return componentOptions + return needVueOptions ? [componentOptions, vueOptions] : componentOptions } diff --git a/src/platforms/mp-lark/runtime/wrapper/page-parser.js b/src/platforms/mp-lark/runtime/wrapper/page-parser.js index 6598851b0..54d630652 100644 --- a/src/platforms/mp-lark/runtime/wrapper/page-parser.js +++ b/src/platforms/mp-lark/runtime/wrapper/page-parser.js @@ -1,16 +1,11 @@ import { - isPage, - instances, - initRelation + instances } from './util' import parseBasePage from '../../../mp-weixin/runtime/wrapper/page-base-parser' export default function parsePage (vuePageOptions) { - const pageOptions = parseBasePage(vuePageOptions, { - isPage, - initRelation - }) + const pageOptions = parseBasePage(vuePageOptions) // 页面需要在 ready 中触发,其他组件是在 handleLink 中触发 pageOptions.lifetimes.ready = function ready () { if (this.$vm && this.$vm.mpType === 'page') { diff --git a/src/platforms/mp-qq/runtime/wrapper/component-parser.js b/src/platforms/mp-qq/runtime/wrapper/component-parser.js index 49f48ab77..a9ab1cbe0 100644 --- a/src/platforms/mp-qq/runtime/wrapper/component-parser.js +++ b/src/platforms/mp-qq/runtime/wrapper/component-parser.js @@ -1,5 +1,5 @@ import parseBaseComponent from '../../../mp-weixin/runtime/wrapper/component-parser' -export default function parseComponent (vueComponentOptions) { - return parseBaseComponent(vueComponentOptions) -} +export default function parseComponent (vueComponentOptions, needVueOptions) { + return parseBaseComponent(vueComponentOptions, needVueOptions) +} diff --git a/src/platforms/mp-toutiao/runtime/wrapper/component-parser.js b/src/platforms/mp-toutiao/runtime/wrapper/component-parser.js index be28d0313..91438fe5b 100644 --- a/src/platforms/mp-toutiao/runtime/wrapper/component-parser.js +++ b/src/platforms/mp-toutiao/runtime/wrapper/component-parser.js @@ -20,8 +20,11 @@ function currentComponents (mpInstance, callback) { } } -export default function parseComponent (vueOptions) { - const [componentOptions, VueComponent] = parseBaseComponent(vueOptions) +export default function parseComponent (vueComponentOptions, needVueOptions) { + const [componentOptions, vueOptions, VueComponent] = parseBaseComponent(vueComponentOptions, { + isPage, + initRelation + }, true) const lifetimes = componentOptions.lifetimes // 基础库 2.0 以上 attached 顺序错乱,按照 created 顺序强制纠正 @@ -87,5 +90,5 @@ export default function parseComponent (vueOptions) { componentOptions.methods.__l = handleLink - return componentOptions + return needVueOptions ? [componentOptions, vueOptions] : componentOptions } diff --git a/src/platforms/mp-toutiao/runtime/wrapper/page-parser.js b/src/platforms/mp-toutiao/runtime/wrapper/page-parser.js index 4776891a4..2701ff821 100644 --- a/src/platforms/mp-toutiao/runtime/wrapper/page-parser.js +++ b/src/platforms/mp-toutiao/runtime/wrapper/page-parser.js @@ -1,17 +1,12 @@ import { - isPage, instances, - components, - initRelation + components } from './util' import parseBasePage from '../../../mp-weixin/runtime/wrapper/page-base-parser' export default function parsePage (vuePageOptions) { - const pageOptions = parseBasePage(vuePageOptions, { - isPage, - initRelation - }) + const pageOptions = parseBasePage(vuePageOptions) const lifetimes = pageOptions.lifetimes const oldCreated = lifetimes.created lifetimes.created = function created () { diff --git a/src/platforms/mp-weixin/runtime/wrapper/component-base-parser.js b/src/platforms/mp-weixin/runtime/wrapper/component-base-parser.js index 44fa0299f..deb711b15 100644 --- a/src/platforms/mp-weixin/runtime/wrapper/component-base-parser.js +++ b/src/platforms/mp-weixin/runtime/wrapper/component-base-parser.js @@ -18,7 +18,7 @@ import { export default function parseBaseComponent (vueComponentOptions, { isPage, initRelation -} = {}) { +} = {}, needVueOptions) { const [VueComponent, vueOptions] = initVueComponent(Vue, vueComponentOptions) const options = { @@ -110,6 +110,9 @@ export default function parseBaseComponent (vueComponentOptions, { }) } + if (needVueOptions) { + return [componentOptions, vueOptions, VueComponent] + } if (isPage) { return componentOptions } diff --git a/src/platforms/mp-weixin/runtime/wrapper/component-parser.js b/src/platforms/mp-weixin/runtime/wrapper/component-parser.js index e84b4456e..e58620446 100644 --- a/src/platforms/mp-weixin/runtime/wrapper/component-parser.js +++ b/src/platforms/mp-weixin/runtime/wrapper/component-parser.js @@ -5,9 +5,9 @@ import { initRelation } from './util' -export default function parseComponent (vueComponentOptions) { +export default function parseComponent (vueComponentOptions, needVueOptions) { return parseBaseComponent(vueComponentOptions, { isPage, initRelation - }) -} + }, needVueOptions) +} 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 e8fe85ef6..6b9064265 100644 --- a/src/platforms/mp-weixin/runtime/wrapper/page-base-parser.js +++ b/src/platforms/mp-weixin/runtime/wrapper/page-base-parser.js @@ -18,16 +18,10 @@ const hooks = [ hooks.push(...PAGE_EVENT_HOOKS) -export default function parseBasePage (vuePageOptions, { - isPage, - initRelation -}) { - const pageOptions = parseComponent(vuePageOptions, { - isPage, - initRelation - }) - - initHooks(pageOptions.methods, hooks, vuePageOptions) +export default function parseBasePage (vuePageOptions) { + const [pageOptions, vueOptions] = parseComponent(vuePageOptions, true) + + initHooks(pageOptions.methods, hooks, vueOptions) pageOptions.methods.onLoad = function (query) { this.options = query diff --git a/src/platforms/mp-weixin/runtime/wrapper/page-parser.js b/src/platforms/mp-weixin/runtime/wrapper/page-parser.js index 0a64ca861..26c762f98 100644 --- a/src/platforms/mp-weixin/runtime/wrapper/page-parser.js +++ b/src/platforms/mp-weixin/runtime/wrapper/page-parser.js @@ -1,13 +1,5 @@ import parseBasePage from './page-base-parser' -import { - isPage, - initRelation -} from './util' - export default function parsePage (vuePageOptions) { - return parseBasePage(vuePageOptions, { - isPage, - initRelation - }) -} + return parseBasePage(vuePageOptions) +} diff --git a/src/platforms/mp-xhs/runtime/wrapper/component-parser.js b/src/platforms/mp-xhs/runtime/wrapper/component-parser.js index bd4d6f660..7ae942b2b 100644 --- a/src/platforms/mp-xhs/runtime/wrapper/component-parser.js +++ b/src/platforms/mp-xhs/runtime/wrapper/component-parser.js @@ -19,8 +19,8 @@ import { fixSetDataEnd } from '../../../mp-weixin/runtime/wrapper/fix-set-data' -export default function parseComponent (vueComponentOptions) { - const componentOptions = parseBaseComponent(vueComponentOptions) +export default function parseComponent (vueComponentOptions, needVueOptions) { + const [componentOptions, vueOptions] = parseBaseComponent(vueComponentOptions, true) const oldAttached = componentOptions.lifetimes.attached componentOptions.lifetimes.attached = function attached () { // 暂不区分版本 @@ -32,5 +32,5 @@ export default function parseComponent (vueComponentOptions) { } oldAttached.call(this) } - return componentOptions + return needVueOptions ? [componentOptions, vueOptions] : componentOptions } diff --git a/src/platforms/mp-xhs/runtime/wrapper/page-parser.js b/src/platforms/mp-xhs/runtime/wrapper/page-parser.js index f206ca955..3384f57f3 100644 --- a/src/platforms/mp-xhs/runtime/wrapper/page-parser.js +++ b/src/platforms/mp-xhs/runtime/wrapper/page-parser.js @@ -80,8 +80,8 @@ export default function parsePage (vuePageOptions) { triggerEvent: function noop () {} } - initHooks(pageOptions, hooks, vuePageOptions) - initUnknownHooks(pageOptions, vuePageOptions, ['onReady']) + initHooks(pageOptions, hooks, vueOptions) + initUnknownHooks(pageOptions, vueOptions, ['onReady']) if (Array.isArray(vueOptions.wxsCallMethods)) { vueOptions.wxsCallMethods.forEach(callMethod => { diff --git a/src/platforms/quickapp-webview/runtime/wrapper/component-parser.js b/src/platforms/quickapp-webview/runtime/wrapper/component-parser.js index da644ba7a..0353bb3e9 100644 --- a/src/platforms/quickapp-webview/runtime/wrapper/component-parser.js +++ b/src/platforms/quickapp-webview/runtime/wrapper/component-parser.js @@ -11,8 +11,11 @@ import { import parseBaseComponent from '../../../mp-weixin/runtime/wrapper/component-base-parser' -export default function parseComponent (vueOptions) { - const [componentOptions, VueComponent] = parseBaseComponent(vueOptions) +export default function parseComponent (vueComponentOptions, needVueOptions) { + const [componentOptions, vueOptions, VueComponent] = parseBaseComponent(vueComponentOptions, { + isPage, + initRelation + }, true) componentOptions.lifetimes.attached = function attached () { const properties = this.properties @@ -46,5 +49,5 @@ export default function parseComponent (vueOptions) { componentOptions.methods.__l = handleLink - return componentOptions -} + return needVueOptions ? [componentOptions, vueOptions] : componentOptions +} diff --git a/src/platforms/quickapp-webview/runtime/wrapper/page-parser.js b/src/platforms/quickapp-webview/runtime/wrapper/page-parser.js index b02d1728f..a93452343 100644 --- a/src/platforms/quickapp-webview/runtime/wrapper/page-parser.js +++ b/src/platforms/quickapp-webview/runtime/wrapper/page-parser.js @@ -1,16 +1,11 @@ import { - isPage, - instances, - initRelation + instances } from './util' import parseBasePage from '../../../mp-weixin/runtime/wrapper/page-base-parser' export default function parsePage (vuePageOptions) { - const pageOptions = parseBasePage(vuePageOptions, { - isPage, - initRelation - }) + const pageOptions = parseBasePage(vuePageOptions) // 页面需要在 ready 中触发,其他组件是在 handleLink 中触发 pageOptions.lifetimes.ready = function ready () { if (this.$vm && this.$vm.mpType === 'page') { -- GitLab