[fix] handle arrow function on slot inside svelte:fragment (#7667)

Fixes #7485
pull/7739/head
qinmu 2 years ago committed by GitHub
parent 9ad416be94
commit 5dd703fe81
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -323,7 +323,7 @@ export default class Expression {
const func_expression = func_declaration[0];
if (node.type === 'InlineComponent') {
if (node.type === 'InlineComponent' || node.type === 'SlotTemplate') {
// <Comp let:data />
this.replace(func_expression);
} else {

@ -0,0 +1,8 @@
<script>
export let log;
export let b;
function innerCall(a) {
log(`a: ${a}, b: ${b}`);
}
</script>
<slot name="inner_slot" {innerCall} />

@ -0,0 +1,12 @@
<script>
import Inner from './Inner.svelte'
export let log;
export let a;
export let b;
</script>
<Inner {log} {b}>
<svelte:fragment let:innerCall slot="inner_slot">
<slot outerCall={() => innerCall(a)} />
</svelte:fragment>
</Inner>

@ -0,0 +1,27 @@
let logs;
function log(value) {
logs.push(value);
}
export default {
html: '<button>click me</button>',
props: {
a: 'a',
b: 'b',
log
},
before_test() {
logs = [];
},
async test({ assert, component, target, window }) {
const button = target.querySelector('button');
await button.dispatchEvent(new window.MouseEvent('click'));
assert.deepEqual(logs, ['a: a, b: b']);
component.a = '1';
component.b = '2';
await button.dispatchEvent(new window.MouseEvent('click'));
assert.deepEqual(logs, ['a: a, b: b', 'a: 1, b: 2']);
}
};

@ -0,0 +1,12 @@
<script>
import Outer from "./Outer.svelte";
export let log = [];
export let a;
export let b;
</script>
<Outer let:outerCall {log} {a} {b}>
<button on:click={outerCall}>
click me
</button>
</Outer>
Loading…
Cancel
Save