fix: generate v-if fallback comment as block

This commit is contained in:
Evan You 2019-10-24 21:19:02 -04:00
parent 7b637319a8
commit ed29af7bea
5 changed files with 22 additions and 10 deletions

View File

@ -389,7 +389,7 @@ return function render() {
? _createBlock(\\"div\\", _hoisted_1, [ ? _createBlock(\\"div\\", _hoisted_1, [
_hoisted_2 _hoisted_2
]) ])
: _createCommentVNode()) : _createCommentVNode(\\"v-if\\", true))
])) ]))
} }
}" }"

View File

@ -161,7 +161,7 @@ return function render() {
? _createBlock(_Fragment, { key: 0 }, _renderList(list, (i) => { ? _createBlock(_Fragment, { key: 0 }, _renderList(list, (i) => {
return (_openBlock(), _createBlock(\\"div\\")) return (_openBlock(), _createBlock(\\"div\\"))
}), 128 /* UNKEYED_FRAGMENT */) }), 128 /* UNKEYED_FRAGMENT */)
: _createCommentVNode()) : _createCommentVNode(\\"v-if\\", true))
} }
}" }"
`; `;

View File

@ -9,7 +9,7 @@ return function render() {
return (_openBlock(), ok return (_openBlock(), ok
? _createBlock(\\"div\\", { key: 0 }) ? _createBlock(\\"div\\", { key: 0 })
: _createCommentVNode()) : _createCommentVNode(\\"v-if\\", true))
} }
}" }"
`; `;
@ -27,7 +27,7 @@ return function render() {
\\"hello\\", \\"hello\\",
_createVNode(\\"p\\") _createVNode(\\"p\\")
]) ])
: _createCommentVNode()) : _createCommentVNode(\\"v-if\\", true))
} }
}" }"
`; `;
@ -41,7 +41,7 @@ return function render() {
return (_openBlock(), ok return (_openBlock(), ok
? _renderSlot($slots, \\"default\\", { key: 0 }) ? _renderSlot($slots, \\"default\\", { key: 0 })
: _createCommentVNode()) : _createCommentVNode(\\"v-if\\", true))
} }
}" }"
`; `;
@ -87,7 +87,7 @@ return function render() {
? _createBlock(\\"div\\", { key: 0 }) ? _createBlock(\\"div\\", { key: 0 })
: orNot : orNot
? _createBlock(\\"p\\", { key: 1 }) ? _createBlock(\\"p\\", { key: 1 })
: _createCommentVNode()) : _createCommentVNode(\\"v-if\\", true))
} }
}" }"
`; `;
@ -101,7 +101,7 @@ return function render() {
return (_openBlock(), ok return (_openBlock(), ok
? _renderSlot($slots, \\"default\\", { key: 0 }) ? _renderSlot($slots, \\"default\\", { key: 0 })
: _createCommentVNode()) : _createCommentVNode(\\"v-if\\", true))
} }
}" }"
`; `;

View File

@ -152,7 +152,12 @@ function createCodegenNodeForBranch(
return createConditionalExpression( return createConditionalExpression(
branch.condition, branch.condition,
createChildrenCodegenNode(branch, index, context), createChildrenCodegenNode(branch, index, context),
createCallExpression(context.helper(CREATE_COMMENT)) // make sure to pass in asBlock: true so that the comment node call
// closes the current block.
createCallExpression(context.helper(CREATE_COMMENT), [
__DEV__ ? '"v-if"' : '""',
'true'
])
) as IfConditionalExpression ) as IfConditionalExpression
} else { } else {
return createChildrenCodegenNode(branch, index, context) as BlockCodegenNode return createChildrenCodegenNode(branch, index, context) as BlockCodegenNode

View File

@ -258,8 +258,15 @@ export function createTextVNode(text: string = ' ', flag: number = 0): VNode {
return createVNode(Text, null, text, flag) return createVNode(Text, null, text, flag)
} }
export function createCommentVNode(text: string = ''): VNode { export function createCommentVNode(
return createVNode(Comment, null, text) text: string = '',
// when used as the v-else branch, the comment node must be created as a
// block to ensure correct updates.
asBlock: boolean = false
): VNode {
return asBlock
? createBlock(Comment, null, text)
: createVNode(Comment, null, text)
} }
export function normalizeVNode(child: VNodeChild): VNode { export function normalizeVNode(child: VNodeChild): VNode {