Skip to content

Commit 4b5f34e

Browse files
authored
Merge pull request #3934 from tanhauhau/tanhauhau/dynamic-event-handler-expression
fix dynamic event handler expression
2 parents 054f409 + 58b7b5b commit 4b5f34e

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

src/compiler/compile/nodes/EventHandler.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ export default class EventHandler extends Node {
4444

4545
this.reassigned = component.var_lookup.get(info.expression.name).reassigned;
4646
}
47+
} else if (this.expression.dynamic_dependencies().length > 0) {
48+
this.reassigned = true;
4749
}
4850
} else {
4951
this.handler_name = component.get_unique_name(`${sanitize(this.name)}_handler`);
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
export default {
2+
html: `<button>bar</button>`,
3+
4+
async test({ assert, component, target, window }) {
5+
const [button] = target.querySelectorAll(
6+
'button'
7+
);
8+
9+
const event = new window.MouseEvent('click');
10+
11+
await button.dispatchEvent(event);
12+
assert.htmlEqual(target.innerHTML, `<button>foo</button>`);
13+
14+
await button.dispatchEvent(event);
15+
assert.htmlEqual(target.innerHTML, `<button>bar</button>`);
16+
17+
await button.dispatchEvent(event);
18+
assert.htmlEqual(target.innerHTML, `<button>foo</button>`);
19+
},
20+
};
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<script>
2+
let name = 'bar';
3+
function foo() {
4+
name = 'foo';
5+
}
6+
function bar() {
7+
name = 'bar';
8+
}
9+
10+
</script>
11+
12+
<button on:click={name === 'bar' ? foo : bar}>{name}</button>

0 commit comments

Comments
 (0)