面试题答案
一键面试- 思路:
- 在Svelte中,通常事件是从子组件向父组件传递。对于子组件向祖父组件传递事件数据,我们可以通过在中间层组件进行事件转发来实现。
- 子组件触发自定义事件,中间层组件监听这个事件,然后中间层组件再触发另一个自定义事件将数据传递给祖父组件。
- 关键代码:
- 子组件(Child.svelte):
<script>
const dataToSend = { message: 'Hello, Grandparent!' };
const sendDataToParent = () => {
const event = new CustomEvent('child - event', { detail: dataToSend });
this.dispatchEvent(event);
};
</script>
<button on:click={sendDataToParent}>Send data to grandparent</button>
- 中间层组件(Middle.svelte):
<script>
const forwardDataToGrandparent = (event) => {
const newEvent = new CustomEvent('middle - event', { detail: event.detail });
this.dispatchEvent(newEvent);
};
</script>
<Child on:child - event={forwardDataToGrandparent} />
- 祖父组件(Grandparent.svelte):
<script>
const handleDataFromChild = (event) => {
console.log('Received data from child:', event.detail);
};
</script>
<Middle on:middle - event={handleDataFromChild} />
这里假设Child.svelte
、Middle.svelte
和Grandparent.svelte
是相应的组件文件。在Grandparent.svelte
中可以处理从Child.svelte
传递过来的数据。