fix(runtime-core): fix resolving inheritAttrs from mixins (#3742)

fix #3741
This commit is contained in:
edison
2021-05-28 09:53:41 +08:00
committed by GitHub
parent 9b2e894017
commit d6607c9864
5 changed files with 65 additions and 21 deletions

View File

@@ -567,17 +567,14 @@ export function applyOptions(
errorCaptured,
serverPrefetch,
// public API
expose
expose,
inheritAttrs
} = options
const publicThis = instance.proxy!
const ctx = instance.ctx
const globalMixins = instance.appContext.mixins
if (asMixin && render && instance.render === NOOP) {
instance.render = render as InternalRenderFunction
}
// applyOptions is called non-as-mixin once per instance
if (!asMixin) {
shouldCacheAccess = false
@@ -755,17 +752,6 @@ export function applyOptions(
})
}
// asset options.
// To reduce memory usage, only components with mixins or extends will have
// resolved asset registry attached to instance.
if (asMixin) {
resolveInstanceAssets(instance, options, COMPONENTS)
resolveInstanceAssets(instance, options, DIRECTIVES)
if (__COMPAT__ && isCompatEnabled(DeprecationTypes.FILTERS, instance)) {
resolveInstanceAssets(instance, options, FILTERS)
}
}
// lifecycle options
if (!asMixin) {
callSyncHook(
@@ -831,6 +817,27 @@ export function applyOptions(
warn(`The \`expose\` option is ignored when used in mixins.`)
}
}
// options that are handled when creating the instance but also need to be
// applied from mixins
if (asMixin) {
if (render && instance.render === NOOP) {
instance.render = render as InternalRenderFunction
}
if (inheritAttrs != null && instance.type.inheritAttrs == null) {
instance.inheritAttrs = inheritAttrs
}
// asset options.
// To reduce memory usage, only components with mixins or extends will have
// resolved asset registry attached to instance.
resolveInstanceAssets(instance, options, COMPONENTS)
resolveInstanceAssets(instance, options, DIRECTIVES)
if (__COMPAT__ && isCompatEnabled(DeprecationTypes.FILTERS, instance)) {
resolveInstanceAssets(instance, options, FILTERS)
}
}
}
function resolveInstanceAssets(