コンポーネントを作成し、プログラムでイベント リスナーをアタッチすることは可能ですか?
<svelte:component/>
これは、 を使用して広がる小道具で簡単に可能であることを知ってい{ ...props }
ます。イベントリスナーをアタッチするために同様のことが達成できるのではないかと思います。
たとえば、次の例では、プログラムで および にアタッチしたいと考えていon:message
ます。A
on:count
B
<!-- App.svelte -->
<script>
import A from './A.svelte';
import B from './B.svelte';
let message = 'Hi there ';
let count = 0;
const components = [{
component: A,
props: { message },
listeners: { message: (m) => { console.log(`They say "${m}"`); } }
}, {
component: B,
props: { count },
listeners: { click: () => { count++; } }
}];
</script>
{#each components as component}
<div><svelte:component this={component.component} { ...component.props }/></div>
{/each}
<div>
<p>They say "{message}"!</p>
<p>They clicked {count} times!</p>
</div>
<!-- A.svelte -->
<script>
import { createEventDispatcher } from 'svelte';
const dispatch = createEventDispatcher();
export let message = '';
function changeHandler(e) { dispatch('message', message); }
</script>
<input on:change={changeHandler} on:value={message} value={message} />
<!-- B.svelte -->
<script>
import { createEventDispatcher } from 'svelte';
const dispatch = createEventDispatcher();
export let count = 0;
function clickHandler() { dispatch('count', count); }
</script>
<button on:click={clickHandler}>Click me</button>
これがライブデモです: https://svelte.dev/repl/af1bd30ab75b43f19b72a306340b7282?version=3.18.2
components
つまり、配列を次のように拡張する方法があることを望んでいます
<A message={message} on:message={e => { message = e.detail; }}/>
<B count={count} on:count={e => { count = e.detail; }}/>