Skip to content

Commit d4cc7b2

Browse files
committed
fix(teleport): only inherit el for non-patched nodes
fix #1903
1 parent 69cfed6 commit d4cc7b2

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

packages/runtime-core/__tests__/components/Teleport.spec.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ describe('renderer: teleport', () => {
316316
},
317317
render: compile(`
318318
<teleport :to="target" :disabled="disabled">
319-
<div>teleported</div><span>{{ disabled }}</span>
319+
<div>teleported</div><span>{{ disabled }}</span><span v-if="disabled"/>
320320
</teleport>
321321
<div>root</div>
322322
`)
@@ -326,13 +326,13 @@ describe('renderer: teleport', () => {
326326
`"<!--teleport start--><!--teleport end--><div>root</div>"`
327327
)
328328
expect(serializeInner(target)).toMatchInlineSnapshot(
329-
`"<div>teleported</div><span>false</span>"`
329+
`"<div>teleported</div><span>false</span><!--v-if-->"`
330330
)
331331

332332
disabled.value = true
333333
await nextTick()
334334
expect(serializeInner(root)).toMatchInlineSnapshot(
335-
`"<!--teleport start--><div>teleported</div><span>true</span><!--teleport end--><div>root</div>"`
335+
`"<!--teleport start--><div>teleported</div><span>true</span><span></span><!--teleport end--><div>root</div>"`
336336
)
337337
expect(serializeInner(target)).toBe(``)
338338

@@ -343,7 +343,7 @@ describe('renderer: teleport', () => {
343343
`"<!--teleport start--><!--teleport end--><div>root</div>"`
344344
)
345345
expect(serializeInner(target)).toMatchInlineSnapshot(
346-
`"<div>teleported</div><span>false</span>"`
346+
`"<div>teleported</div><span>false</span><!--v-if-->"`
347347
)
348348
})
349349
})

packages/runtime-core/src/components/Teleport.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,10 @@ export const TeleportImpl = {
146146
const oldChildren = n1.children as VNode[]
147147
const children = n2.children as VNode[]
148148
for (let i = 0; i < children.length; i++) {
149-
children[i].el = oldChildren[i].el
149+
// only inherit for non-patched nodes (i.e. static ones)
150+
if (!children[i].el) {
151+
children[i].el = oldChildren[i].el
152+
}
150153
}
151154
}
152155
} else if (!optimized) {

0 commit comments

Comments
 (0)