Skip to content

Commit 8431aff

Browse files
authored
Merge pull request #3097 from sveltejs/gh-3058
always run onDestroy functions
2 parents bb6cd30 + db722c8 commit 8431aff

File tree

7 files changed

+61
-1
lines changed

7 files changed

+61
-1
lines changed

src/runtime/internal/Component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export function destroy_component(component, detaching) {
5454
if (component.$$.fragment) {
5555
run_all(component.$$.on_destroy);
5656

57-
if (detaching) component.$$.fragment.d(1);
57+
component.$$.fragment.d(detaching);
5858

5959
// TODO null out other refs, including component.$$ (but need to
6060
// preserve final state?)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<script>
2+
import { onDestroy } from 'svelte';
3+
import { destroyed } from './destroyed.js';
4+
import B from './B.svelte';
5+
6+
let yes = 1;
7+
8+
onDestroy(() => destroyed.push('A'));
9+
</script>
10+
11+
<div>
12+
{#if yes}
13+
<B/>
14+
{/if}
15+
</div>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<script>
2+
import { onDestroy } from 'svelte';
3+
import { destroyed } from './destroyed.js';
4+
import C from './C.svelte';
5+
6+
let yes = 1;
7+
8+
onDestroy(() => destroyed.push('B'));
9+
</script>
10+
11+
<div>
12+
{#if yes}
13+
<C/>
14+
{/if}
15+
</div>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<script>
2+
import { onDestroy } from 'svelte';
3+
import { destroyed } from './destroyed.js';
4+
5+
let yes = 1;
6+
7+
onDestroy(() => destroyed.push('C'));
8+
</script>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { destroyed, reset } from './destroyed.js';
2+
3+
export default {
4+
test({ assert, component }) {
5+
component.visible = false;
6+
assert.deepEqual(destroyed, ['A', 'B', 'C']);
7+
8+
reset();
9+
}
10+
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export const destroyed = [];
2+
3+
export const reset = () => destroyed.length = 0;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<script>
2+
import A from './A.svelte';
3+
4+
export let visible = true;
5+
</script>
6+
7+
{#if visible}
8+
<A/>
9+
{/if}

0 commit comments

Comments
 (0)