Skip to content

Commit

Permalink
fix(provide): support symbols in applyOptions (#2616)
Browse files Browse the repository at this point in the history
fix #2615
  • Loading branch information
privatenumber authored Nov 30, 2020
1 parent e4f09c1 commit 7a1a782
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 6 deletions.
18 changes: 15 additions & 3 deletions packages/runtime-core/__tests__/apiOptions.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,7 @@ describe('api: options', () => {
})

test('provide/inject', () => {
const symbolKey = Symbol()
const Root = defineComponent({
data() {
return {
Expand All @@ -259,7 +260,8 @@ describe('api: options', () => {
},
provide() {
return {
a: this.a
a: this.a,
[symbolKey]: 2
}
},
render() {
Expand All @@ -271,7 +273,9 @@ describe('api: options', () => {
h(ChildE),
h(ChildF),
h(ChildG),
h(ChildH)
h(ChildH),
h(ChildI),
h(ChildJ)
]
}
})
Expand Down Expand Up @@ -321,7 +325,15 @@ describe('api: options', () => {
default: () => 5
}
})
expect(renderToString(h(Root))).toBe(`11112345`)
const ChildI = defineChild({
b: symbolKey
})
const ChildJ = defineChild({
b: {
from: symbolKey
}
})
expect(renderToString(h(Root))).toBe(`1111234522`)
})

test('provide accessing data in extends', () => {
Expand Down
2 changes: 1 addition & 1 deletion packages/runtime-core/src/apiInject.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { warn } from './warning'

export interface InjectionKey<T> extends Symbol {}

export function provide<T>(key: InjectionKey<T> | string, value: T) {
export function provide<T>(key: InjectionKey<T> | string | number, value: T) {
if (!currentInstance) {
if (__DEV__) {
warn(`provide() can only be used inside setup().`)
Expand Down
4 changes: 2 additions & 2 deletions packages/runtime-core/src/componentOptions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -667,9 +667,9 @@ export function applyOptions(
const provides = isFunction(provideOptions)
? provideOptions.call(publicThis)
: provideOptions
for (const key in provides) {
Reflect.ownKeys(provides).forEach(key => {
provide(key, provides[key])
}
})
})
}

Expand Down

0 comments on commit 7a1a782

Please sign in to comment.