fix(v-model): handle dynamic assigners and array assigners

close #923
This commit is contained in:
Evan You
2020-04-04 20:51:42 -04:00
parent c1d5928f3b
commit f42d11e8e1
5 changed files with 122 additions and 40 deletions

View File

@@ -10,13 +10,18 @@ import {
import { VNode, cloneVNode, isVNode, VNodeProps } from '../vnode'
import { warn } from '../warning'
import { onBeforeUnmount, injectHook, onUnmounted } from '../apiLifecycle'
import { isString, isArray, ShapeFlags, remove } from '@vue/shared'
import {
isString,
isArray,
ShapeFlags,
remove,
invokeArrayFns
} from '@vue/shared'
import { watch } from '../apiWatch'
import { SuspenseBoundary } from './Suspense'
import {
RendererInternals,
queuePostRenderEffect,
invokeHooks,
MoveType,
RendererElement,
RendererNode
@@ -106,7 +111,7 @@ const KeepAliveImpl = {
queuePostRenderEffect(() => {
child.isDeactivated = false
if (child.a) {
invokeHooks(child.a)
invokeArrayFns(child.a)
}
}, parentSuspense)
}
@@ -116,7 +121,7 @@ const KeepAliveImpl = {
queuePostRenderEffect(() => {
const component = vnode.component!
if (component.da) {
invokeHooks(component.da)
invokeArrayFns(component.da)
}
component.isDeactivated = true
}, parentSuspense)

View File

@@ -32,7 +32,8 @@ import {
PatchFlags,
ShapeFlags,
NOOP,
hasOwn
hasOwn,
invokeArrayFns
} from '@vue/shared'
import {
queueJob,
@@ -40,13 +41,7 @@ import {
flushPostFlushCbs,
invalidateJob
} from './scheduler'
import {
effect,
stop,
ReactiveEffectOptions,
isRef,
DebuggerEvent
} from '@vue/reactivity'
import { effect, stop, ReactiveEffectOptions, isRef } from '@vue/reactivity'
import { resolveProps } from './componentProps'
import { resolveSlots } from './componentSlots'
import { pushWarningContext, popWarningContext, warn } from './warning'
@@ -265,14 +260,8 @@ function createDevEffectOptions(
): ReactiveEffectOptions {
return {
scheduler: queueJob,
onTrack: instance.rtc ? e => invokeHooks(instance.rtc!, e) : void 0,
onTrigger: instance.rtg ? e => invokeHooks(instance.rtg!, e) : void 0
}
}
export function invokeHooks(hooks: Function[], arg?: DebuggerEvent) {
for (let i = 0; i < hooks.length; i++) {
hooks[i](arg)
onTrack: instance.rtc ? e => invokeArrayFns(instance.rtc!, e) : void 0,
onTrigger: instance.rtg ? e => invokeArrayFns(instance.rtg!, e) : void 0
}
}
@@ -1106,7 +1095,7 @@ function baseCreateRenderer(
}
// beforeMount hook
if (bm) {
invokeHooks(bm)
invokeArrayFns(bm)
}
// onVnodeBeforeMount
if ((vnodeHook = props && props.onVnodeBeforeMount)) {
@@ -1189,7 +1178,7 @@ function baseCreateRenderer(
next.el = vnode.el
// beforeUpdate hook
if (bu) {
invokeHooks(bu)
invokeArrayFns(bu)
}
// onVnodeBeforeUpdate
if ((vnodeHook = next.props && next.props.onVnodeBeforeUpdate)) {
@@ -1812,7 +1801,7 @@ function baseCreateRenderer(
const { bum, effects, update, subTree, um, da, isDeactivated } = instance
// beforeUnmount hook
if (bum) {
invokeHooks(bum)
invokeArrayFns(bum)
}
if (effects) {
for (let i = 0; i < effects.length; i++) {