diff --git a/packages/svelte/src/compiler/compile/render_dom/wrappers/shared/bind_this.js b/packages/svelte/src/compiler/compile/render_dom/wrappers/shared/bind_this.js
index 8438ee24eb..e3e0b004bc 100644
--- a/packages/svelte/src/compiler/compile/render_dom/wrappers/shared/bind_this.js
+++ b/packages/svelte/src/compiler/compile/render_dom/wrappers/shared/bind_this.js
@@ -84,6 +84,14 @@ export default function bind_this(component, block, binding, variable) {
});
}
`);
- block.chunks.destroy.push(b`${callee}(null);`);
+ if (block.has_outro_method) {
+ block.chunks.outro.push(b`${callee}(null);` );
+ block.chunks.destroy.push(b`if(#current) {
+ ${callee}(null);
+ }`);
+ }
+ else {
+ block.chunks.destroy.push(b`${callee}(null);`);
+ }
return b`${callee}(${variable});`;
}
diff --git a/packages/svelte/test/runtime/samples/bind-this-transition-js-if-else-block/_config.js b/packages/svelte/test/runtime/samples/bind-this-transition-js-if-else-block/_config.js
new file mode 100644
index 0000000000..8110afb476
--- /dev/null
+++ b/packages/svelte/test/runtime/samples/bind-this-transition-js-if-else-block/_config.js
@@ -0,0 +1,13 @@
+export default {
+ get props() {
+ return { show: 'a' };
+ },
+
+ test({ assert, component, target, raf }) {
+ assert.equal(component.el, target.querySelector('div.first'));
+ component.show = 'b';
+
+ raf.tick(200);
+ assert.equal(component.el, target.querySelector('div.second'));
+ }
+};
diff --git a/packages/svelte/test/runtime/samples/bind-this-transition-js-if-else-block/main.svelte b/packages/svelte/test/runtime/samples/bind-this-transition-js-if-else-block/main.svelte
new file mode 100644
index 0000000000..b6bd63ff55
--- /dev/null
+++ b/packages/svelte/test/runtime/samples/bind-this-transition-js-if-else-block/main.svelte
@@ -0,0 +1,16 @@
+
+
+{#if show=="a"}
+
first
+{:else if show=="b"}
+ second
+{/if}
diff --git a/packages/svelte/test/runtime/samples/transition-js-if-else-block-dynamic-outro/_config.js b/packages/svelte/test/runtime/samples/transition-js-if-else-block-dynamic-outro/_config.js
index f01dda09fc..2d92f19e97 100644
--- a/packages/svelte/test/runtime/samples/transition-js-if-else-block-dynamic-outro/_config.js
+++ b/packages/svelte/test/runtime/samples/transition-js-if-else-block-dynamic-outro/_config.js
@@ -10,11 +10,11 @@ export default {
raf.tick(25);
assert.equal(component.yes.foo, undefined);
- assert.equal(component.no.foo, 0.75);
+ assert.equal(component.no, null);
raf.tick(75);
assert.equal(component.yes.foo, undefined);
- assert.equal(component.no.foo, 0.25);
+ assert.equal(component.no, null);
raf.tick(100);
}
diff --git a/packages/svelte/test/runtime/samples/transition-js-if-else-block-outro/_config.js b/packages/svelte/test/runtime/samples/transition-js-if-else-block-outro/_config.js
index 0d56cba09b..07f87775e0 100644
--- a/packages/svelte/test/runtime/samples/transition-js-if-else-block-outro/_config.js
+++ b/packages/svelte/test/runtime/samples/transition-js-if-else-block-outro/_config.js
@@ -6,11 +6,11 @@ export default {
raf.tick(25);
assert.equal(component.yes.foo, undefined);
- assert.equal(component.no.foo, 0.75);
+ assert.equal(component.no, null);
raf.tick(75);
assert.equal(component.yes.foo, undefined);
- assert.equal(component.no.foo, 0.25);
+ assert.equal(component.no, null);
raf.tick(100);
}
diff --git a/packages/svelte/test/runtime/samples/transition-js-if-elseif-block-outro/_config.js b/packages/svelte/test/runtime/samples/transition-js-if-elseif-block-outro/_config.js
index fe7998b662..76961ddd87 100644
--- a/packages/svelte/test/runtime/samples/transition-js-if-elseif-block-outro/_config.js
+++ b/packages/svelte/test/runtime/samples/transition-js-if-elseif-block-outro/_config.js
@@ -11,11 +11,11 @@ export default {
raf.tick(25);
assert.equal(component.yes.foo, undefined);
- assert.equal(component.no.foo, 0.75);
+ assert.equal(component.no, null);
raf.tick(75);
assert.equal(component.yes.foo, undefined);
- assert.equal(component.no.foo, 0.25);
+ assert.equal(component.no, null);
raf.tick(100);
}