fix(provide): support symbols in applyOptions (#2616)

fix #2615
This commit is contained in:
hiroki 2020-11-30 16:36:02 -05:00 committed by GitHub
parent e4f09c1419
commit 7a1a782642
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 6 deletions

View File

@ -251,6 +251,7 @@ describe('api: options', () => {
})
test('provide/inject', () => {
const symbolKey = Symbol()
const Root = defineComponent({
data() {
return {
@ -259,7 +260,8 @@ describe('api: options', () => {
},
provide() {
return {
a: this.a
a: this.a,
[symbolKey]: 2
}
},
render() {
@ -271,7 +273,9 @@ describe('api: options', () => {
h(ChildE),
h(ChildF),
h(ChildG),
h(ChildH)
h(ChildH),
h(ChildI),
h(ChildJ)
]
}
})
@ -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', () => {

View File

@ -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().`)

View File

@ -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])
}
})
})
}