加入不显示所选项目 - 使用 Svelte

Join Not Displaying Selected Items - Using Svelte

此代码的作用:如果未选择任何口味,"Please select at least one flavour" & "You ordered and undefined is displayed"。然后,如果选择了一种口味,则不会显示任何内容。

我正在尝试做的事情:如果未选择任何口味,则会显示 "Please select at least one flavour"。然后只有在选择了某些东西时,我才想显示 "You ordered (then list whatever they ordered)" 即:你点了薄荷巧克力片、饼干和奶油。

我很困惑,因为我认为 ${flavours.slice(0, -1).join(', ')}; & You ordered {join(flavours)} 会列出所选的口味。这是我正在玩的代码。 (来源:来自 Svelte 网站的 Svelte 示例)

 <script>
        let scoops = 1;
        let flavours = ['Mint choc chip'];

        let menu = [
            'Cookies and cream',
            'Mint choc chip',
            'Raspberry ripple'
        ];

        function join(flavours) {
            if (flavours.length === 1) return flavours[0];
            return `${flavours.slice(0, -1).join(', ')};
        }
    </script>

    <h2>Flavours</h2>

    {#each menu as flavour}
        <label>
            <input type=checkbox bind:group={flavours} value={flavour}>
            {flavour}
        </label>
    {/each}

    {#if flavours.length === 0}
        <p>Please select at least one flavour</p>
        <p>
            You ordered {join(flavours)}
        </p>
    {/if}

你有一些错误...

你遗漏了一个引号(但这是一个语法错误,我想你会注意到如果你的原始代码中有这个,因为它根本不起作用):

return `${flavours.slice(0, -1).join(', ')};

// fixed:
return `${flavours.slice(0, -1).join(', ')}`;

// you don't need the quotes here, anyway:
return flavours.slice(0, -1).join(', ');

您还缺少一个 else,这就是为什么您的代码在选择某些值时不显示任何内容的原因:

    {#if flavours.length === 0}
        <p>Please select at least one flavour</p>

    {:else} <-- HERE -->

        <p>
            You ordered {join(flavours)}
        </p>
    {/if}

最后,为什么 slice?它删除了最后一个值,这真的是你想要的吗?

// fixed
return flavours.join(', ');