|
|
@@ -27,7 +27,8 @@ import {
|
|
|
Data,
|
|
|
ComponentInternalInstance,
|
|
|
ComponentOptions,
|
|
|
- ConcreteComponent
|
|
|
+ ConcreteComponent,
|
|
|
+ setCurrentInstance
|
|
|
} from './component'
|
|
|
import { isEmitListener } from './componentEmits'
|
|
|
import { InternalObjectKey } from './vnode'
|
|
|
@@ -179,7 +180,8 @@ export function updateProps(
|
|
|
options,
|
|
|
rawCurrentProps,
|
|
|
camelizedKey,
|
|
|
- value
|
|
|
+ value,
|
|
|
+ instance
|
|
|
)
|
|
|
}
|
|
|
} else {
|
|
|
@@ -214,7 +216,8 @@ export function updateProps(
|
|
|
options,
|
|
|
rawProps || EMPTY_OBJ,
|
|
|
key,
|
|
|
- undefined
|
|
|
+ undefined,
|
|
|
+ instance
|
|
|
)
|
|
|
}
|
|
|
} else {
|
|
|
@@ -277,7 +280,8 @@ function setFullProps(
|
|
|
options!,
|
|
|
rawCurrentProps,
|
|
|
key,
|
|
|
- rawCurrentProps[key]
|
|
|
+ rawCurrentProps[key],
|
|
|
+ instance
|
|
|
)
|
|
|
}
|
|
|
}
|
|
|
@@ -287,7 +291,8 @@ function resolvePropValue(
|
|
|
options: NormalizedProps,
|
|
|
props: Data,
|
|
|
key: string,
|
|
|
- value: unknown
|
|
|
+ value: unknown,
|
|
|
+ instance: ComponentInternalInstance
|
|
|
) {
|
|
|
const opt = options[key]
|
|
|
if (opt != null) {
|
|
|
@@ -295,10 +300,13 @@ function resolvePropValue(
|
|
|
// default values
|
|
|
if (hasDefault && value === undefined) {
|
|
|
const defaultValue = opt.default
|
|
|
- value =
|
|
|
- opt.type !== Function && isFunction(defaultValue)
|
|
|
- ? defaultValue(props)
|
|
|
- : defaultValue
|
|
|
+ if (opt.type !== Function && isFunction(defaultValue)) {
|
|
|
+ setCurrentInstance(instance)
|
|
|
+ value = defaultValue(props)
|
|
|
+ setCurrentInstance(null)
|
|
|
+ } else {
|
|
|
+ value = defaultValue
|
|
|
+ }
|
|
|
}
|
|
|
// boolean casting
|
|
|
if (opt[BooleanFlags.shouldCast]) {
|