fix(compiler-dom): comments in the v-if branchs should be ignored when used in Transition (#3622)
fix #3619
This commit is contained in:
parent
3ef1fcc859
commit
7c74feb3dc
@ -34,7 +34,7 @@ import {
|
|||||||
OPEN_BLOCK,
|
OPEN_BLOCK,
|
||||||
CREATE_VNODE
|
CREATE_VNODE
|
||||||
} from '../runtimeHelpers'
|
} from '../runtimeHelpers'
|
||||||
import { injectProp, findDir, findProp } from '../utils'
|
import { injectProp, findDir, findProp, isBuiltInType } from '../utils'
|
||||||
import { PatchFlags, PatchFlagNames } from '@vue/shared'
|
import { PatchFlags, PatchFlagNames } from '@vue/shared'
|
||||||
|
|
||||||
export const transformIf = createStructuralDirectiveTransform(
|
export const transformIf = createStructuralDirectiveTransform(
|
||||||
@ -146,7 +146,16 @@ export function processIf(
|
|||||||
// move the node to the if node's branches
|
// move the node to the if node's branches
|
||||||
context.removeNode()
|
context.removeNode()
|
||||||
const branch = createIfBranch(node, dir)
|
const branch = createIfBranch(node, dir)
|
||||||
if (__DEV__ && comments.length) {
|
if (
|
||||||
|
__DEV__ &&
|
||||||
|
comments.length &&
|
||||||
|
// #3619 ignore comments if the v-if is direct child of <transition>
|
||||||
|
!(
|
||||||
|
context.parent &&
|
||||||
|
context.parent.type === NodeTypes.ELEMENT &&
|
||||||
|
isBuiltInType(context.parent.tag, 'transition')
|
||||||
|
)
|
||||||
|
) {
|
||||||
branch.children = [...comments, ...branch.children]
|
branch.children = [...comments, ...branch.children]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
|
exports[`the v-if/else-if/else branchs in Transition should ignore comments 1`] = `
|
||||||
|
"const _Vue = Vue
|
||||||
|
|
||||||
|
return function render(_ctx, _cache) {
|
||||||
|
with (_ctx) {
|
||||||
|
const { openBlock: _openBlock, createBlock: _createBlock, createCommentVNode: _createCommentVNode, createVNode: _createVNode, Fragment: _Fragment, Transition: _Transition, withCtx: _withCtx } = _Vue
|
||||||
|
|
||||||
|
return (_openBlock(), _createBlock(_Transition, null, {
|
||||||
|
default: _withCtx(() => [
|
||||||
|
a
|
||||||
|
? (_openBlock(), _createBlock(\\"div\\", { key: 0 }, \\"hey\\"))
|
||||||
|
: b
|
||||||
|
? (_openBlock(), _createBlock(\\"div\\", { key: 1 }, \\"hey\\"))
|
||||||
|
: (_openBlock(), _createBlock(\\"div\\", { key: 2 }, [
|
||||||
|
c
|
||||||
|
? (_openBlock(), _createBlock(\\"p\\", { key: 0 }))
|
||||||
|
: (_openBlock(), _createBlock(_Fragment, { key: 1 }, [
|
||||||
|
_createCommentVNode(\\" this should not be ignored \\"),
|
||||||
|
_createVNode(\\"p\\")
|
||||||
|
], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))
|
||||||
|
]))
|
||||||
|
]),
|
||||||
|
_: 1 /* STABLE */
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
}"
|
||||||
|
`;
|
@ -138,3 +138,21 @@ describe('compiler warnings', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('the v-if/else-if/else branchs in Transition should ignore comments', () => {
|
||||||
|
expect(
|
||||||
|
compile(`
|
||||||
|
<transition>
|
||||||
|
<div v-if="a">hey</div>
|
||||||
|
<!-- this should be ignored -->
|
||||||
|
<div v-else-if="b">hey</div>
|
||||||
|
<!-- this should be ignored -->
|
||||||
|
<div v-else>
|
||||||
|
<p v-if="c"/>
|
||||||
|
<!-- this should not be ignored -->
|
||||||
|
<p v-else/>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
`).code
|
||||||
|
).toMatchSnapshot()
|
||||||
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user