diff --git a/packages/uni-app-plus/dist/uni-app-service.es.js b/packages/uni-app-plus/dist/uni-app-service.es.js index 9c5907af9cd8e0c3f5875e8a0cb5676611590972..8017754f973017125c80277613a879b050742ded 100644 --- a/packages/uni-app-plus/dist/uni-app-service.es.js +++ b/packages/uni-app-plus/dist/uni-app-service.es.js @@ -10039,16 +10039,17 @@ var serviceContext = (function (vue) { } }); if (mpType === 'page') { + instance.__isVisible = true; try { invokeHook(publicThis, ON_LOAD, instance.attrs.__pageQuery); - vue.nextTick(() => { - // 延迟onShow,保证组件的onShow也可以监听到 - invokeHook(publicThis, ON_SHOW); - }); } catch (e) { console.error(e.message + LINEFEED + e.stack); } + vue.nextTick(() => { + // 延迟onShow,保证组件的onShow也可以监听到 + invokeHook(publicThis, ON_SHOW); + }); } } diff --git a/packages/uni-h5/dist/uni-h5.cjs.js b/packages/uni-h5/dist/uni-h5.cjs.js index 67b715867494ae1b8af82cb6e39a16a31b3c411e..588f7f674c8a61b963df4027f3643e76a613c388 100644 --- a/packages/uni-h5/dist/uni-h5.cjs.js +++ b/packages/uni-h5/dist/uni-h5.cjs.js @@ -6525,7 +6525,7 @@ function injectLifecycleHook(name, hook, publicThis, instance) { } } function initHooks(options, instance, publicThis) { - options.mpType || publicThis.$mpType; + const mpType = options.mpType || publicThis.$mpType; Object.keys(options).forEach((name) => { if (name.indexOf("on") === 0) { const hooks = options[name]; @@ -6536,6 +6536,17 @@ function initHooks(options, instance, publicThis) { } } }); + if (mpType === "page") { + instance.__isVisible = true; + try { + invokeHook(publicThis, uniShared.ON_LOAD, instance.attrs.__pageQuery); + } catch (e2) { + console.error(e2.message + uniShared.LINEFEED + e2.stack); + } + vue.nextTick(() => { + invokeHook(publicThis, uniShared.ON_SHOW); + }); + } } function applyOptions(options, instance, publicThis) { initHooks(options, instance, publicThis); @@ -6919,12 +6930,9 @@ function setupPage(comp) { setup(instance) { instance.root = instance; const route = usePageRoute(); + instance.attrs.__pageQuery = uniShared.decodedQuery(route.query); { - vue.nextTick(() => { - const { onLoad } = instance; - onLoad && shared.invokeArrayFns(onLoad, uniShared.decodedQuery(route.query)); - }); - return route.query; + return instance.attrs.__pageQuery; } } }); diff --git a/packages/uni-h5/dist/uni-h5.es.js b/packages/uni-h5/dist/uni-h5.es.js index 24daf08bdfdc69b557fc16dee6d2c952f101d9b0..6a110f0c04ed2add0f0c4f69e232a9676b99b9c7 100644 --- a/packages/uni-h5/dist/uni-h5.es.js +++ b/packages/uni-h5/dist/uni-h5.es.js @@ -1,6 +1,6 @@ import { withModifiers, createVNode, getCurrentInstance, ref, defineComponent, openBlock, createElementBlock, provide, computed, watch, onUnmounted, inject, onBeforeUnmount, mergeProps, injectHook, reactive, onActivated, onMounted, nextTick, onBeforeMount, withDirectives, vShow, shallowRef, watchEffect, isVNode, Fragment, markRaw, createTextVNode, onBeforeActivate, onBeforeDeactivate, createBlock, renderList, onDeactivated, createApp, Transition, effectScope, withCtx, KeepAlive, resolveDynamicComponent, createElementVNode, normalizeStyle, renderSlot } from "vue"; import { isString, extend, stringifyStyle, parseStringStyle, isPlainObject, isFunction, capitalize, camelize, isArray, hasOwn, isObject, toRawType, makeMap as makeMap$1, isPromise, hyphenate, invokeArrayFns as invokeArrayFns$1 } from "@vue/shared"; -import { I18N_JSON_DELIMITERS, once, passive, initCustomDataset, invokeArrayFns, resolveOwnerVm, resolveOwnerEl, ON_WXS_INVOKE_CALL_METHOD, normalizeTarget, ON_RESIZE, ON_APP_ENTER_FOREGROUND, ON_APP_ENTER_BACKGROUND, ON_SHOW, ON_HIDE, ON_PAGE_SCROLL, ON_REACH_BOTTOM, EventChannel, SCHEME_RE, DATA_RE, getCustomDataset, LINEFEED, ON_ERROR, callOptions, ON_LAUNCH, PRIMARY_COLOR, removeLeadingSlash, getLen, debounce, UniLifecycleHooks, NAVBAR_HEIGHT, parseQuery, ON_UNLOAD, ON_REACH_BOTTOM_DISTANCE, decodedQuery, WEB_INVOKE_APPSERVICE, ON_WEB_INVOKE_APP_SERVICE, updateElementStyle, ON_BACK_PRESS, parseUrl, addFont, scrollTo, RESPONSIVE_MIN_WIDTH, formatDateTime, ON_PULL_DOWN_REFRESH } from "@dcloudio/uni-shared"; +import { I18N_JSON_DELIMITERS, once, passive, initCustomDataset, invokeArrayFns, resolveOwnerVm, resolveOwnerEl, ON_WXS_INVOKE_CALL_METHOD, normalizeTarget, ON_RESIZE, ON_APP_ENTER_FOREGROUND, ON_APP_ENTER_BACKGROUND, ON_SHOW, ON_HIDE, ON_PAGE_SCROLL, ON_REACH_BOTTOM, EventChannel, SCHEME_RE, DATA_RE, getCustomDataset, LINEFEED, ON_ERROR, callOptions, ON_LAUNCH, PRIMARY_COLOR, removeLeadingSlash, getLen, debounce, ON_LOAD, UniLifecycleHooks, NAVBAR_HEIGHT, parseQuery, ON_UNLOAD, ON_REACH_BOTTOM_DISTANCE, decodedQuery, WEB_INVOKE_APPSERVICE, ON_WEB_INVOKE_APP_SERVICE, updateElementStyle, ON_BACK_PRESS, parseUrl, addFont, scrollTo, RESPONSIVE_MIN_WIDTH, formatDateTime, ON_PULL_DOWN_REFRESH } from "@dcloudio/uni-shared"; import { initVueI18n, isI18nStr, LOCALE_EN, LOCALE_ES, LOCALE_FR, LOCALE_ZH_HANS, LOCALE_ZH_HANT } from "@dcloudio/uni-i18n"; import { useRoute, createRouter, createWebHistory, createWebHashHistory, useRouter, isNavigationFailure, RouterView } from "vue-router"; let i18n; @@ -13399,7 +13399,7 @@ function injectLifecycleHook(name, hook, publicThis, instance2) { } } function initHooks(options, instance2, publicThis) { - options.mpType || publicThis.$mpType; + const mpType = options.mpType || publicThis.$mpType; Object.keys(options).forEach((name) => { if (name.indexOf("on") === 0) { const hooks = options[name]; @@ -13410,6 +13410,17 @@ function initHooks(options, instance2, publicThis) { } } }); + if (mpType === "page") { + instance2.__isVisible = true; + try { + invokeHook(publicThis, ON_LOAD, instance2.attrs.__pageQuery); + } catch (e2) { + console.error(e2.message + LINEFEED + e2.stack); + } + nextTick(() => { + invokeHook(publicThis, ON_SHOW); + }); + } } function applyOptions(options, instance2, publicThis) { initHooks(options, instance2, publicThis); @@ -13963,13 +13974,10 @@ function setupPage(comp) { setup(instance2) { instance2.root = instance2; const route = usePageRoute(); + instance2.attrs.__pageQuery = decodedQuery(route.query); const pageMeta = usePageMeta(); - onMounted(() => { + onBeforeMount(() => { onPageShow(instance2, pageMeta); - const { onLoad, onShow } = instance2; - onLoad && invokeArrayFns$1(onLoad, decodedQuery(route.query)); - instance2.__isVisible = true; - onShow && invokeArrayFns$1(onShow); }); onMounted(() => { onPageReady(instance2); diff --git a/packages/uni-h5/src/framework/setup/index.ts b/packages/uni-h5/src/framework/setup/index.ts index 9265b34b4d235230deaee8a63d8d029255065515..0cb37109a68845b369645b0aecd309d4cab7ae97 100644 --- a/packages/uni-h5/src/framework/setup/index.ts +++ b/packages/uni-h5/src/framework/setup/index.ts @@ -33,17 +33,13 @@ import { initLaunchOptions, getEnterOptions } from './utils' interface SetupComponentOptions { init: (vm: ComponentPublicInstance) => void - setup: (instance: ComponentInternalInstance) => Record | void - afterSetup?: ( - instance: ComponentInternalInstance, - query: Record - ) => void + setup: (instance: ComponentInternalInstance) => Record | void before?: (comp: DefineComponent) => void } function wrapperComponentSetup( comp: DefineComponent, - { init, setup, before, afterSetup }: SetupComponentOptions + { init, setup, before }: SetupComponentOptions ) { before && before(comp) const oldSetup = comp.setup @@ -54,9 +50,6 @@ function wrapperComponentSetup( if (oldSetup) { return oldSetup(query || props, ctx) } - if (afterSetup) { - afterSetup(instance, query!) - } } } @@ -85,29 +78,17 @@ export function setupWindow(comp: any, id: number) { export function setupPage(comp: any) { return setupComponent(comp, { init: initPage, - afterSetup(instance, query) { - // 因为 onLoad 是在 setup 执行过程中添加的,故需要放在 after 中执行 - const { onLoad } = instance - onLoad && invokeArrayFns(onLoad, decodedQuery(query)) - }, setup(instance) { instance.root = instance // 组件 root 指向页面 const route = usePageRoute() - // node环境仅触发Page onLoad生命周期 + // 存储参数,让 initHooks 中执行 onLoad 时,可以访问到 + instance.attrs.__pageQuery = decodedQuery(route.query) if (__NODE_JS__) { - nextTick(() => { - const { onLoad } = instance - onLoad && invokeArrayFns(onLoad, decodedQuery(route.query)) - }) - return route.query + return instance.attrs.__pageQuery as Record } const pageMeta = usePageMeta() - onMounted(() => { - // 放在 onMounted 中,可以保证子组件中监听的相关生命周期也可以触发,比如onShow,onPageScroll + onBeforeMount(() => { onPageShow(instance, pageMeta) - const { onShow } = instance - instance.__isVisible = true - onShow && invokeArrayFns(onShow) }) onMounted(() => { onPageReady(instance) diff --git a/packages/uni-vue/src/componentOptions/hooks.ts b/packages/uni-vue/src/componentOptions/hooks.ts index f33619d723305627385fc0d3b60ee8e3724b7426..067ec70060653537750f4721b1918917a4353355 100644 --- a/packages/uni-vue/src/componentOptions/hooks.ts +++ b/packages/uni-vue/src/componentOptions/hooks.ts @@ -41,15 +41,16 @@ export function initHooks( } } }) - if (__PLATFORM__ === 'app' && mpType === 'page') { + if ((__PLATFORM__ === 'app' || __PLATFORM__ === 'h5') && mpType === 'page') { + instance.__isVisible = true try { invokeHook(publicThis, ON_LOAD, instance.attrs.__pageQuery) - nextTick(() => { - // 延迟onShow,保证组件的onShow也可以监听到 - invokeHook(publicThis, ON_SHOW) - }) } catch (e: any) { console.error(e.message + LINEFEED + e.stack) } + nextTick(() => { + // 延迟onShow,保证组件的onShow也可以监听到 + invokeHook(publicThis, ON_SHOW) + }) } }