阅读(1757) (0)

Svelte 事件转发

2023-02-21 14:30:03 更新

与 DOM 事件不同, 组件事件不会 冒泡(bubble) ,如果你想要在某个深层嵌套的组件上监听事件,则中间组件必须 转发(forward) 该事件。

这种情况,我们有类似的App.svelte和 Inner.svelte 在 前面章节,但是现在多出一个 Outer.svelte来包含 <Inner/>

解决这个问题的方法之一是添加 createEventDispatcher 到 Outer.svelte中,监听其 message 事件,并为它创建一个转发程序:

<script>
	import Inner from './Inner.svelte';
	import { createEventDispatcher } from 'svelte';

	const dispatch = createEventDispatcher();

	function forward(event) {
		dispatch('message', event.detail);
	}
</script>

<Inner on:message={forward}/>

但这样书写似乎有些臃肿,因此 Svelte 设立了一个简写属性 on:message。 message 没有赋予特定的值得情况下意味着转发所有massage事件:

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

<Inner on:message/>