Skip to content

Commit 5dd703f

Browse files
authored
[fix] handle arrow function on slot inside svelte:fragment (#7667)
Fixes #7485
1 parent 9ad416b commit 5dd703f

File tree

5 files changed

+60
-1
lines changed

5 files changed

+60
-1
lines changed

src/compiler/compile/nodes/shared/Expression.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ export default class Expression {
323323

324324
const func_expression = func_declaration[0];
325325

326-
if (node.type === 'InlineComponent') {
326+
if (node.type === 'InlineComponent' || node.type === 'SlotTemplate') {
327327
// <Comp let:data />
328328
this.replace(func_expression);
329329
} else {
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<script>
2+
export let log;
3+
export let b;
4+
function innerCall(a) {
5+
log(`a: ${a}, b: ${b}`);
6+
}
7+
</script>
8+
<slot name="inner_slot" {innerCall} />
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<script>
2+
import Inner from './Inner.svelte'
3+
export let log;
4+
export let a;
5+
export let b;
6+
</script>
7+
8+
<Inner {log} {b}>
9+
<svelte:fragment let:innerCall slot="inner_slot">
10+
<slot outerCall={() => innerCall(a)} />
11+
</svelte:fragment>
12+
</Inner>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
let logs;
2+
function log(value) {
3+
logs.push(value);
4+
}
5+
6+
export default {
7+
html: '<button>click me</button>',
8+
props: {
9+
a: 'a',
10+
b: 'b',
11+
log
12+
},
13+
before_test() {
14+
logs = [];
15+
},
16+
async test({ assert, component, target, window }) {
17+
const button = target.querySelector('button');
18+
await button.dispatchEvent(new window.MouseEvent('click'));
19+
20+
assert.deepEqual(logs, ['a: a, b: b']);
21+
22+
component.a = '1';
23+
component.b = '2';
24+
await button.dispatchEvent(new window.MouseEvent('click'));
25+
assert.deepEqual(logs, ['a: a, b: b', 'a: 1, b: 2']);
26+
}
27+
};
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<script>
2+
import Outer from "./Outer.svelte";
3+
export let log = [];
4+
export let a;
5+
export let b;
6+
</script>
7+
8+
<Outer let:outerCall {log} {a} {b}>
9+
<button on:click={outerCall}>
10+
click me
11+
</button>
12+
</Outer>

0 commit comments

Comments
 (0)