diff --git a/src/platforms/web/runtime/components/transition.js b/src/platforms/web/runtime/components/transition.js index 297688fb..b3908fc7 100644 --- a/src/platforms/web/runtime/components/transition.js +++ b/src/platforms/web/runtime/components/transition.js @@ -127,9 +127,13 @@ export default { return placeholder(h, rawChild) } - const key = child.key = child.key == null || child.isStatic - ? `__v${child.tag + this._uid}__` - : child.key + // ensure a key that is unique to the vnode type and to this transition + // component instance. This key will be used to remove pending leaving nodes + // during entering. + const id = `__transition-${this._uid}-` + const key = child.key = child.key == null + ? id + child.tag + : child.key.indexOf(id) === 0 ? child.key : id + child.key const data = (child.data || (child.data = {})).transition = extractTransitionData(this) const oldRawChild = this._vnode const oldChild: any = getRealChild(oldRawChild) diff --git a/src/platforms/web/runtime/modules/transition.js b/src/platforms/web/runtime/modules/transition.js index 391505c3..8941f96c 100644 --- a/src/platforms/web/runtime/modules/transition.js +++ b/src/platforms/web/runtime/modules/transition.js @@ -103,7 +103,6 @@ export function enter (vnode: VNodeWithData, toggleDisplay: ?() => void) { const parent = el.parentNode const pendingNode = parent && parent._pending && parent._pending[vnode.key] if (pendingNode && - pendingNode.context === vnode.context && pendingNode.tag === vnode.tag && pendingNode.elm._leaveCb) { pendingNode.elm._leaveCb()