Events /
Event forwarding
a. Basics b. Adding data c. Dynamic attributes d. Styling e. Nested components f. Making an app a. Assignments b. Declarations c. Statements d. Updating arrays and objects a. Declaring props b. Default values c. Spread props a. If blocks b. Else blocks c. Else-if blocks d. Each blocks e. Keyed each blocks f. Await blocks a. DOM events b. Inline handlers c. Event modifiers d. Component events e. Event forwarding f. DOM event forwarding a. Text inputs b. Numeric inputs c. Checkbox inputs d. Group inputs e. Textarea inputs f. Select bindings g. Select multiple h. Contenteditable bindings i. Each block bindings j. Media elements k. Dimensions l. This m. Component bindings n. Binding to component instances a. onMount b. onDestroy c. beforeUpdate and afterUpdate d. tick a. Writable stores b. Auto-subscriptions c. Readable stores d. Derived stores e. Custom stores f. Store bindings a. Tweened b. Spring a. The transition directive b. Adding parameters c. In and out d. Custom CSS transitions e. Custom JS transitions f. Transition events g. Local transitions h. Deferred transitions i. Key blocks a. The animate directive a. The use directive b. Adding parameters a. The class directive b. Shorthand class directive c. Inline styles d. The style directive a. Slots b. Slot fallbacks c. Named slots d. Checking for slot content e. Slot props a. setContext and getContext a. <svelte:self> b. <svelte:component> c. <svelte:element> d. <svelte:window> e. <svelte:window> bindings f. <svelte:document> g. <svelte:body> h. <svelte:head> i. <svelte:options> j. <svelte:fragment> a. Sharing code b. Exports a. The @debug tag b. HTML tags a. Congratulations!
Unlike DOM events, component events don't bubble . If you want to listen to an event on some deeply nested component, the intermediate components must forward the event.
In this case, we have the same App.svelte
and Inner.svelte
as in the previous chapter , but there's now an Outer.svelte
component that contains <Inner/>
.
One way we could solve the problem is adding createEventDispatcher
to Outer.svelte
, listening for the message
event, and creating a handler for it:
< 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}/>
But that's a lot of code to write, so Svelte gives us an equivalent shorthand — an on:message
event directive without a value means 'forward all message
events'.
< script >
import Inner from './Inner.svelte' ;
</ script >
< Inner on : message />
Show me