]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(runtime-core): return the exposeProxy from mount (#4606)
authorskirtle <65301168+skirtles-code@users.noreply.github.com>
Tue, 21 Sep 2021 16:55:08 +0000 (17:55 +0100)
committerGitHub <noreply@github.com>
Tue, 21 Sep 2021 16:55:08 +0000 (12:55 -0400)
packages/runtime-core/__tests__/apiExpose.spec.ts
packages/runtime-core/src/apiCreateApp.ts

index 9f7ba535031bd917b568283032836f445eb57cae..1235096b016e5912c49ca8a4592fe0003ed39f4a 100644 (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() {
index 3e438107da03752d274aba6749dab2b694638ab6..b77c90c3448414c653c60ea78256dca9c9fa73ff 100644 (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` +