Svelte技术问题:Modal组件不显示Confirm按钮且事件无法转发至App.Svelte
Svelte组件问题修复方案
问题1:Confirm按钮无法显示
你在App.svelte中给Confirm按钮指定了slot="footer",但Modal组件的footer区域里的插槽没有设置name="footer"属性,导致内容无法被正确插入到对应位置。
修复代码(Modal.svelte的footer部分):
<footer> <button on:click={closeModal}>Close</button> <slot name="footer" class="footer"></slot> </footer>
问题2:Close按钮事件无法传递到App.svelte
Modal组件里的Close按钮用了原生的onclick绑定方法,这不符合Svelte的事件绑定规则,导致closeModal函数里的事件派发无法被App.svelte捕获。
修复代码(Modal.svelte的Close按钮):
<button on:click={closeModal}>Close</button>
完整修正后的Modal.svelte代码
<script> import {createEventDispatcher} from 'svelte'; const dispatch = createEventDispatcher(); function closeModal(){ dispatch("close-my-modal"); } </script> <div class="backdrop" /> <div class="modal"> <header> <slot name="header" /> </header> <div class="content"> <slot /> </div> <footer> <button on:click={closeModal}>Close</button> <slot name="footer" class="footer"></slot> </footer> </div> <style> .backdrop { position: fixed; top: 0; left: 0; width: 100%; height: 100vh; background: rgba(0, 0, 0, 0.75); z-index: 10; } .modal { padding: 1rem; position: fixed; top: 10vh; left: 10%; width: 80%; max-height: 80vh; background: white; border-radius: 5px; z-index: 100; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26); overflow: scroll; } header { border-bottom: 4px solid #c23535; } </style>
额外提示:原代码中header的border-bottom属性缺少solid关键字,已在修正代码中补上,确保边框能正常显示。
内容的提问来源于stack exchange,提问作者Danish Xavier
相关产品推荐
相关产品推荐

