Min*_*nty 7 html javascript event-handling svelte svelte-component
当单击父组件中的图标/按钮时,我基本上需要能够在一个或多个组件(通过 svelte:component 动态添加)中触发某些内容。例如,我需要勾住下面用**表示的部分:-
<script>
let charts = [
ChartA,
ChartB,
ChartC
];
</script>
{#each charts as chart, i}
<div class="wrapper">
<div class="icon" on:click={**HowToPassClickEventToComponent**}></div>
<div class="content">
<svelte:component this={charts[i]} {**clickedEvent**}/>
</div>
</div>
{/each}
Run Code Online (Sandbox Code Playgroud)
我能够通过取消一个 props 数组来获得一些工作,但是当数组更改时每个组件都会收到通知,所以这不是很干净。
我已经搜索了 Google 和 StackOverflow 并在 Svelte Discord 频道中询问了这个问题,但目前没有运气。
这似乎是一个如此简单的要求,但几天后我仍然卡住了,因此非常感谢有关如何将事件传递到动态组件的任何建议。
Ric*_*ris 15
你可以做这样的:
<script>
import ChartA from './ChartA.svelte'
import ChartB from './ChartB.svelte'
import ChartC from './ChartC.svelte'
let charts = [
ChartA,
ChartB,
ChartC
];
let events = [];
</script>
<style>
.icon{
width:60px;
height:30px;
background-color:grey;
}
</style>
{#each charts as chart, i}
<div class="wrapper">
<div class="icon" on:click={e=>events[i] = e}>Click</div>
<div class="content">
<svelte:component this={charts[i]} event={events[i]}/>
</div>
</div>
{/each}
Run Code Online (Sandbox Code Playgroud)
不过,将事件作为数据传递会有点不寻常。更习惯的做法是在父组件中设置一些状态以响应事件,并将该状态向下传递。
或者,如果子组件确实需要自己响应事件,您可以采用这种方法......
<script>
import ChartA from './ChartA.svelte'
import ChartB from './ChartB.svelte'
import ChartC from './ChartC.svelte'
let charts = [
ChartA,
ChartB,
ChartC
];
let instances = [];
</script>
<style>
.icon{
width:60px;
height:30px;
background-color:grey;
}
</style>
{#each charts as chart, i}
<div class="wrapper">
<div class="icon" on:click={e => instances[i].handle(e)}>Click</div>
<div class="content">
<svelte:component
this={charts[i]}
bind:this={instances[i]}
/>
</div>
</div>
{/each}
Run Code Online (Sandbox Code Playgroud)
...其中每个子组件导出一个handle方法:
<script>
let event;
export function handle(e){
event = e;
};
</script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6023 次 |
| 最近记录: |