You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Svelte多级事件转发问题:createEventDispatcher事件无法多级传递

Svelte自定义事件多级传递解决方案

在Svelte中,通过createEventDispatcher派发的自定义事件默认不会像DOM原生事件那样自动冒泡,所以当Outer组件处理了Inner派发的message事件后,事件不会自动传递到App组件。要实现多级传递,有两种简单的方式:

方式一:手动再次派发事件

在Outer组件的事件处理函数中,完成自身逻辑后,再用createEventDispatcher把事件重新派发给上层组件:

修改后的Outer.svelte:

<script>
    import Inner from './Inner.svelte';
    import { createEventDispatcher } from 'svelte';
    
    const dispatch = createEventDispatcher();
    function handleMessage(event) {
        console.log(event.detail.text);
        // 将事件转发给上层组件
        dispatch('message', event.detail);
    }
</script>

<Inner on:message={handleMessage}/>

方式二:使用事件转发语法

Svelte支持直接通过on:eventName(不带处理函数)的语法自动转发事件,如果你需要同时在Outer组件处理事件并转发,可以同时声明处理函数和转发规则:

修改后的Outer.svelte:

<script>
    import Inner from './Inner.svelte';
    
    function handleMessage(event) {
        console.log(event.detail.text);
    }
</script>

<!-- 同时处理事件并自动转发给上层 -->
<Inner on:message={handleMessage} on:message/>

注意事项

你的App.svelte中handleMessage函数里使用了event.detail.value,但Inner派发的事件字段是text,需要修正为event.detail.text才能正常弹出内容:

修改后的App.svelte:

<script>
    import Outer from './Outer.svelte';

    function handleMessage(event) {
        alert(event.detail.text);
    }
</script>

<Outer on:message={handleMessage}/>

内容的提问来源于stack exchange,提问作者sly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:55:31