diff --git a/packages/uni-shared/src/onCreateVueApp.ts b/packages/uni-shared/src/onCreateVueApp.ts index ecff98edd3ab8dee41ba83bba928238a7c84b6c7..26641a22d17dd455a32de52bf517a2bfa9e95fd0 100644 --- a/packages/uni-shared/src/onCreateVueApp.ts +++ b/packages/uni-shared/src/onCreateVueApp.ts @@ -1,4 +1,6 @@ import type { App } from 'vue' +import { isFunction } from '@vue/shared' +import { once } from './utils' type CreateVueAppHook = (app: App) => void let vueApp: App @@ -18,3 +20,14 @@ export function invokeCreateVueAppHook(app: App) { vueApp = app createVueAppHooks.forEach((hook) => hook(app)) } + +export const invokeCreateErrorHandler = once( + ( + app: App, + createErrorHandler: (app: App) => App['config']['errorHandler'] + ) => { + if (isFunction((app._component as any).onError)) { + return createErrorHandler(app) + } + } +) diff --git a/packages/uni-vue/src/index.ts b/packages/uni-vue/src/index.ts index b41fb49550c90ca9fcd21029b1defbf8bb4c644a..af697c1aeb6a134398c830e36e1006ef3993152d 100644 --- a/packages/uni-vue/src/index.ts +++ b/packages/uni-vue/src/index.ts @@ -1,7 +1,9 @@ import { App } from 'vue' -import { isFunction } from '@vue/shared' -import { invokeCreateVueAppHook } from '@dcloudio/uni-shared' +import { + invokeCreateVueAppHook, + invokeCreateErrorHandler, +} from '@dcloudio/uni-shared' import { applyOptions } from './componentOptions' import { set } from './componentInstance' @@ -10,10 +12,8 @@ import { uniIdMixin } from './uni-id-mixin' export function initApp(app: App) { const appConfig = app._context.config - if (isFunction((app._component as any).onError)) { - appConfig.errorHandler = createErrorHandler(app) - } + appConfig.errorHandler = invokeCreateErrorHandler(app, createErrorHandler) initOptionMergeStrategies(appConfig.optionMergeStrategies) const globalProperties = appConfig.globalProperties