You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Svelte项目调用Modal时黑屏无响应及组件调用方式咨询

Svelte项目问题求助

1. Modal弹窗异常:点击后黑屏无法操作

在Svelte项目中实现了可动态调整尺寸的网格按钮,点击按钮打开Dialog/Modal时,屏幕直接变黑,完全无法进行任何操作,只能关闭页面重启。

2. 父组件调用子组件的最优实现方式

目前通过数组传递组件的方式创建子组件,不确定这种方案是否为最优解,想咨询更合适的实现方式。


main_app.svelte

<script>
    import SwContainer from './swContainer.svelte';
    import SwButtonIten from './swButtonIten.svelte';
    import SwDialogIten from './swDialogIten.svelte';

    let componentPositions = [
        { 
            component: SwButtonIten,
            props: { cstmLabel: 'Open Dialog 1', handleClick: openDialog1 },
            rowPos: 0,
            colPos: 0
        },
        { 
            component: SwButtonIten,
            props: { cstmLabel: 'Open Dialog 2' },
            rowPos: 0,
            colPos: 1
        }
    ];

    let dialog1IsOpen = false;
    let dialog2IsOpen = false;

    function openDialog1() {
        dialog1IsOpen = true;
    }

    function openDialog2() {
        dialog2IsOpen = true;
    }
</script>

<svelte:head>
    <title>About</title>
    <meta name="description" content="About this app" />
    <link
        rel="stylesheet"
        href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css"
    />
</svelte:head>

<SwContainer numRow={2} numCol={2} {componentPositions}></SwContainer>

<SwDialogIten bind:isOpen={dialog1IsOpen} title="Dialog_1" message="etc, etc, etc" />
<SwDialogIten bind:isOpen={dialog2IsOpen} title="Diálog_2" message="etc, etc, etc" />

swContainer.svelte

<script>
    import { Col, Container, Row } from 'sveltestrap';
    import SwButtonIten from './swButtonIten.svelte';

    export let uniqueID = 0;
    export let numRow = 0;
    export let numCol = 0;
    export let componentPositions;

</script>

<Container>
    {#each Array(numRow) as _, rowIndex}
        <Row>
            {#each Array(numCol) as _, colIndex}
                <Col>
                    {#each componentPositions.filter(pos => pos.rowPos === rowIndex && pos.colPos === colIndex) as item}
                        <svelte:component this={item.component} {...item.props} />
                    {/each}
                </Col>
            {/each}
        </Row>
    {/each}
</Container>

swButtonIten.svelte

<script>
    import { Button } from 'sveltestrap';

    export let uniqueID = '';
    export let cstmLabel = '';
    export let rowPos = 0;
    export let colPos = 0;

    export let handleClick;

    function onClick() {
        handleClick();
    }
</script>

<Button on:click={onClick}>{cstmLabel}</Button>

swDialogIten.svelte

<script>
    import {
        Button,
        Modal,
        ModalBody,
        ModalFooter,
        ModalHeader
    } from 'sveltestrap';

    export let isOpen = false;
    export let title = '';
    export let message = '';
</script>

<Modal bind:isOpen>
    <ModalHeader>{title}</ModalHeader>
    <ModalBody>{message}</ModalBody>
    <ModalFooter>
        <Button color="secondary" on:click={() => isOpen = false}>Close</Button>
    </ModalFooter>
</Modal>

<style>
    /* styles */
</style>

内容的提问来源于stack exchange,提问作者gioslaap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 09:27:27