Browse Source

fix(runtime-core): fix user attched public instance properties that start with "$"

Evan You 6 years ago
parent
commit
d7ca1c5c6e

+ 5 - 0
packages/runtime-core/__tests__/componentProxy.spec.ts

@@ -117,6 +117,11 @@ describe('component: proxy', () => {
     instanceProxy.foo = 1
     expect(instanceProxy.foo).toBe(1)
     expect(instance!.ctx.foo).toBe(1)
+
+    // should also allow properties that start with $
+    const obj = (instanceProxy.$store = {})
+    expect(instanceProxy.$store).toBe(obj)
+    expect(instance!.ctx.$store).toBe(obj)
   })
 
   test('globalProperties', () => {

+ 4 - 0
packages/runtime-core/src/componentProxy.ts

@@ -184,6 +184,10 @@ export const PublicInstanceProxyHandlers: ProxyHandler<any> = {
       (cssModule = cssModule[key])
     ) {
       return cssModule
+    } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {
+      // user may set custom properties to `this` that start with `$`
+      accessCache![key] = AccessTypes.CONTEXT
+      return ctx[key]
     } else if (
       // global properties
       ((globalProperties = appContext.config.globalProperties),