Skip to content

Commit

Permalink
refactor: simplify resolveDyanmicComponent
Browse files Browse the repository at this point in the history
  • Loading branch information
yyx990803 committed Mar 16, 2020
1 parent 9ad65b1 commit 19228a4
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -814,8 +814,7 @@ describe('compiler: element transform', () => {
{
type: NodeTypes.SIMPLE_EXPRESSION,
content: 'foo'
},
'$'
}
]
}
})
Expand Down
8 changes: 3 additions & 5 deletions packages/compiler-core/src/transforms/transformElement.ts
Original file line number Diff line number Diff line change
Expand Up @@ -215,11 +215,9 @@ export function resolveComponentType(
}
// dynamic <component :is="asdf" />
else if (isProp.exp) {
return createCallExpression(
context.helper(RESOLVE_DYNAMIC_COMPONENT),
// _ctx.$ exposes the owner instance of current render function
[isProp.exp, context.prefixIdentifiers ? `_ctx.$` : `$`]
)
return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [
isProp.exp
])
}
}

Expand Down
13 changes: 4 additions & 9 deletions packages/runtime-core/src/helpers/resolveAssets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,11 @@ export function resolveComponent(name: string): Component | undefined {
}

export function resolveDynamicComponent(
component: unknown,
// Dynamic component resolution has to be called inline due to potential
// access to scope variables. When called inside slots it will be inside
// a different component's render cycle, so the owner instance must be passed
// in explicitly.
instance: ComponentInternalInstance
component: unknown
): Component | undefined {
if (!component) return
if (isString(component)) {
return resolveAsset(COMPONENTS, component, instance)
return resolveAsset(COMPONENTS, component, currentRenderingInstance)
} else if (isFunction(component) || isObject(component)) {
return component
}
Expand All @@ -46,13 +41,13 @@ export function resolveDirective(name: string): Directive | undefined {
function resolveAsset(
type: typeof COMPONENTS,
name: string,
instance?: ComponentInternalInstance
instance?: ComponentInternalInstance | null
): Component | undefined
// overload 2: directives
function resolveAsset(
type: typeof DIRECTIVES,
name: string,
instance?: ComponentInternalInstance
instance?: ComponentInternalInstance | null
): Directive | undefined

function resolveAsset(
Expand Down

0 comments on commit 19228a4

Please sign in to comment.