From 518d7cbd4cb19c02c36af10919fc407e8b24740f Mon Sep 17 00:00:00 2001 From: Ronny Date: Thu, 11 Apr 2024 10:10:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E3=80=90=E5=8F=91=E8=A1=8C=E4=B8=BA?= =?UTF-8?q?=E6=B7=B7=E5=90=88=E5=88=86=E5=8C=85=E3=80=91TypeError:=20t.$ca?= =?UTF-8?q?llHook=20is=20not=20a=20function?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 当发行为混合分包的时候,uniapp 会调用 initCreateSubpackageApp 方法 2. initCreateSubpackageApp 里调用 parseApp ,并在 onLaunch 时候进行 initBaseInstance 3. initCreateSubpackageApp 里调用 parseApp 后同步执行 `vm.$.ctx.$scope = app;` 4. initBaseInstance 在 onLaunch 会进行 `if (this.$vm && ctx.$scope) {return;}` 阻断,如果通过则执行 `ctx.$hasHook = hasHook; ctx.$callHook = callHook;` 问题出在 onLaunch 是异步的,导致 4 的流程阻断,没有执行 $callHook 赋值,最终导致 `initAppLifecycle` 中的 `vm.$callHook` 为 undefined --- packages/uni-mp-core/src/runtime/app.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/uni-mp-core/src/runtime/app.ts b/packages/uni-mp-core/src/runtime/app.ts index 1d58ba126c4..c7643b910d9 100644 --- a/packages/uni-mp-core/src/runtime/app.ts +++ b/packages/uni-mp-core/src/runtime/app.ts @@ -113,6 +113,8 @@ export function initCreateSubpackageApp(parseAppOptions?: ParseAppOptions) { }) if (!app) return ;(vm.$ as any).ctx.$scope = app + (vm.$ as any).ctx.$hasHook = hasHook + (vm.$ as any).ctx.$callHook = callHook const globalData = app.globalData if (globalData) { Object.keys(appOptions.globalData).forEach((name) => {