mirror of https://github.com/vuejs/core.git
fix(compiler-core): ignore whitespace when matching adjacent v-if (#12321)
close #9173
This commit is contained in:
parent
f05a8d613b
commit
10ebcef8c8
|
@ -246,6 +246,28 @@ return function render(_ctx, _cache) {
|
||||||
}"
|
}"
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
exports[`compiler: transform component slots > with whitespace: 'preserve' > named slot with v-if + v-else 1`] = `
|
||||||
|
"const { resolveComponent: _resolveComponent, withCtx: _withCtx, createSlots: _createSlots, openBlock: _openBlock, createBlock: _createBlock } = Vue
|
||||||
|
|
||||||
|
return function render(_ctx, _cache) {
|
||||||
|
const _component_Comp = _resolveComponent("Comp")
|
||||||
|
|
||||||
|
return (_openBlock(), _createBlock(_component_Comp, null, _createSlots({ _: 2 /* DYNAMIC */ }, [
|
||||||
|
ok
|
||||||
|
? {
|
||||||
|
name: "one",
|
||||||
|
fn: _withCtx(() => ["foo"]),
|
||||||
|
key: "0"
|
||||||
|
}
|
||||||
|
: {
|
||||||
|
name: "two",
|
||||||
|
fn: _withCtx(() => ["baz"]),
|
||||||
|
key: "1"
|
||||||
|
}
|
||||||
|
]), 1024 /* DYNAMIC_SLOTS */))
|
||||||
|
}"
|
||||||
|
`;
|
||||||
|
|
||||||
exports[`compiler: transform component slots > with whitespace: 'preserve' > should not generate whitespace only default slot 1`] = `
|
exports[`compiler: transform component slots > with whitespace: 'preserve' > should not generate whitespace only default slot 1`] = `
|
||||||
"const { resolveComponent: _resolveComponent, withCtx: _withCtx, openBlock: _openBlock, createBlock: _createBlock } = Vue
|
"const { resolveComponent: _resolveComponent, withCtx: _withCtx, openBlock: _openBlock, createBlock: _createBlock } = Vue
|
||||||
|
|
||||||
|
|
|
@ -988,5 +988,19 @@ describe('compiler: transform component slots', () => {
|
||||||
|
|
||||||
expect(generate(root, { prefixIdentifiers: true }).code).toMatchSnapshot()
|
expect(generate(root, { prefixIdentifiers: true }).code).toMatchSnapshot()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('named slot with v-if + v-else', () => {
|
||||||
|
const source = `
|
||||||
|
<Comp>
|
||||||
|
<template #one v-if="ok">foo</template>
|
||||||
|
<template #two v-else>baz</template>
|
||||||
|
</Comp>
|
||||||
|
`
|
||||||
|
const { root } = parseWithSlots(source, {
|
||||||
|
whitespace: 'preserve',
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(generate(root, { prefixIdentifiers: true }).code).toMatchSnapshot()
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -222,7 +222,7 @@ export function buildSlots(
|
||||||
let prev
|
let prev
|
||||||
while (j--) {
|
while (j--) {
|
||||||
prev = children[j]
|
prev = children[j]
|
||||||
if (prev.type !== NodeTypes.COMMENT) {
|
if (prev.type !== NodeTypes.COMMENT && isNonWhitespaceContent(prev)) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue