mirror of https://github.com/vuejs/core.git
fix(compiler-ssr): handle ssr attr fallthrough when preserve whitespace (#12304)
close #8072
This commit is contained in:
parent
6611dda298
commit
4783118919
|
|
@ -48,6 +48,31 @@ describe('ssr: attrs fallthrough', () => {
|
||||||
`)
|
`)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
//#8072
|
||||||
|
test(`fallthrough component content (with whitespace: 'preserve')`, () => {
|
||||||
|
expect(
|
||||||
|
compile(
|
||||||
|
`
|
||||||
|
<a v-if="to">Foo</a>
|
||||||
|
<a v-else>Bar</a>
|
||||||
|
`,
|
||||||
|
{
|
||||||
|
whitespace: 'preserve',
|
||||||
|
},
|
||||||
|
).code,
|
||||||
|
).toMatchInlineSnapshot(`
|
||||||
|
"const { ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
|
||||||
|
|
||||||
|
return function ssrRender(_ctx, _push, _parent, _attrs) {
|
||||||
|
if (_ctx.to) {
|
||||||
|
_push(\`<a\${_ssrRenderAttrs(_attrs)}>Foo</a>\`)
|
||||||
|
} else {
|
||||||
|
_push(\`<a\${_ssrRenderAttrs(_attrs)}>Bar</a>\`)
|
||||||
|
}
|
||||||
|
}"
|
||||||
|
`)
|
||||||
|
})
|
||||||
|
|
||||||
test('should not inject to fallthrough component content if not root', () => {
|
test('should not inject to fallthrough component content if not root', () => {
|
||||||
expect(compile(`<div/><transition><div/></transition>`).code)
|
expect(compile(`<div/><transition><div/></transition>`).code)
|
||||||
.toMatchInlineSnapshot(`
|
.toMatchInlineSnapshot(`
|
||||||
|
|
|
||||||
|
|
@ -7,11 +7,12 @@ import {
|
||||||
type TemplateChildNode,
|
type TemplateChildNode,
|
||||||
createSimpleExpression,
|
createSimpleExpression,
|
||||||
findDir,
|
findDir,
|
||||||
|
isCommentOrWhitespace,
|
||||||
locStub,
|
locStub,
|
||||||
} from '@vue/compiler-dom'
|
} from '@vue/compiler-dom'
|
||||||
|
|
||||||
const filterChild = (node: ParentNode) =>
|
const filterChild = (node: ParentNode) =>
|
||||||
node.children.filter(n => n.type !== NodeTypes.COMMENT)
|
node.children.filter(n => !isCommentOrWhitespace(n))
|
||||||
|
|
||||||
const hasSingleChild = (node: ParentNode): boolean =>
|
const hasSingleChild = (node: ParentNode): boolean =>
|
||||||
filterChild(node).length === 1
|
filterChild(node).length === 1
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue