Skip to content

Commit 518d7cb

Browse files
authored
fix: 【发行为混合分包】TypeError: t.$callHook is not a function
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
1 parent 7ca4c59 commit 518d7cb

File tree

1 file changed

+2
-0
lines changed
  • packages/uni-mp-core/src/runtime

1 file changed

+2
-0
lines changed

packages/uni-mp-core/src/runtime/app.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ export function initCreateSubpackageApp(parseAppOptions?: ParseAppOptions) {
113113
})
114114
if (!app) return
115115
;(vm.$ as any).ctx.$scope = app
116+
(vm.$ as any).ctx.$hasHook = hasHook
117+
(vm.$ as any).ctx.$callHook = callHook
116118
const globalData = app.globalData
117119
if (globalData) {
118120
Object.keys(appOptions.globalData).forEach((name) => {

0 commit comments

Comments
 (0)