fix(runtime-core): return the exposeProxy from mount (#4606)

This commit is contained in:
skirtle 2021-09-21 17:55:08 +01:00 committed by GitHub
parent 2ca45dc3e6
commit 5aa4255808
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 3 deletions

View File

@ -1,4 +1,4 @@
import { nodeOps, render } from '@vue/runtime-test'
import { createApp, nodeOps, render } from '@vue/runtime-test'
import { defineComponent, h, ref } from '../src'
describe('api: expose', () => {
@ -170,6 +170,26 @@ describe('api: expose', () => {
render(h(Parent), root)
})
test('with mount', () => {
const Component = defineComponent({
setup(_, { expose }) {
expose({
foo: 1
})
return {
bar: 2
}
},
render() {
return h('div')
}
})
const root = nodeOps.createElement('div')
const vm = createApp(Component).mount(root) as any
expect(vm.foo).toBe(1)
expect(vm.bar).toBe(undefined)
})
test('expose should allow access to built-in instance properties', () => {
const GrandChild = defineComponent({
render() {

View File

@ -3,7 +3,8 @@ import {
Data,
validateComponentName,
Component,
ComponentInternalInstance
ComponentInternalInstance,
getExposeProxy
} from './component'
import {
ComponentOptions,
@ -309,7 +310,7 @@ export function createAppAPI<HostElement>(
devtoolsInitApp(app, version)
}
return vnode.component!.proxy
return getExposeProxy(vnode.component!) || vnode.component!.proxy
} else if (__DEV__) {
warn(
`App has already been mounted.\n` +