fix(compile-core): fix v-model with newlines edge case (#11960)
close #8306
This commit is contained in:
parent
902bd9c438
commit
62242886d7
|
@ -31,7 +31,7 @@ export const transformModel: DirectiveTransform = (dir, node, context) => {
|
||||||
|
|
||||||
// we assume v-model directives are always parsed
|
// we assume v-model directives are always parsed
|
||||||
// (not artificially created by a transform)
|
// (not artificially created by a transform)
|
||||||
const rawExp = exp.loc.source
|
const rawExp = exp.loc.source.trim()
|
||||||
const expString =
|
const expString =
|
||||||
exp.type === NodeTypes.SIMPLE_EXPRESSION ? exp.content : rawExp
|
exp.type === NodeTypes.SIMPLE_EXPRESSION ? exp.content : rawExp
|
||||||
|
|
||||||
|
|
|
@ -1084,6 +1084,29 @@ return (_ctx, _cache) => {
|
||||||
}"
|
}"
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
exports[`SFC compile <script setup> > inlineTemplate mode > v-model w/ newlines codegen 1`] = `
|
||||||
|
"import { unref as _unref, isRef as _isRef, vModelText as _vModelText, withDirectives as _withDirectives, openBlock as _openBlock, createElementBlock as _createElementBlock } from "vue"
|
||||||
|
|
||||||
|
|
||||||
|
export default {
|
||||||
|
setup(__props) {
|
||||||
|
|
||||||
|
const count = ref(0)
|
||||||
|
|
||||||
|
return (_ctx, _cache) => {
|
||||||
|
return _withDirectives((_openBlock(), _createElementBlock("input", {
|
||||||
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (_isRef(count) ? (count).value = $event : null))
|
||||||
|
}, null, 512 /* NEED_PATCH */)), [
|
||||||
|
[_vModelText,
|
||||||
|
_unref(count)
|
||||||
|
]
|
||||||
|
])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}"
|
||||||
|
`;
|
||||||
|
|
||||||
exports[`SFC compile <script setup> > inlineTemplate mode > with defineExpose() 1`] = `
|
exports[`SFC compile <script setup> > inlineTemplate mode > with defineExpose() 1`] = `
|
||||||
"
|
"
|
||||||
export default {
|
export default {
|
||||||
|
|
|
@ -472,6 +472,23 @@ describe('SFC compile <script setup>', () => {
|
||||||
assertCode(content)
|
assertCode(content)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('v-model w/ newlines codegen', () => {
|
||||||
|
const { content } = compile(
|
||||||
|
`<script setup>
|
||||||
|
const count = ref(0)
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<input v-model="
|
||||||
|
count
|
||||||
|
">
|
||||||
|
</template>
|
||||||
|
`,
|
||||||
|
{ inlineTemplate: true },
|
||||||
|
)
|
||||||
|
expect(content).toMatch(`_isRef(count) ? (count).value = $event : null`)
|
||||||
|
assertCode(content)
|
||||||
|
})
|
||||||
|
|
||||||
test('v-model should not generate ref assignment code for non-setup bindings', () => {
|
test('v-model should not generate ref assignment code for non-setup bindings', () => {
|
||||||
const { content } = compile(
|
const { content } = compile(
|
||||||
`<script setup>
|
`<script setup>
|
||||||
|
|
Loading…
Reference in New Issue