【问题标题】:Svelte input bind JSON arraySvelte 输入绑定 JSON 数组
【发布时间】:2020-04-02 00:57:44
【问题描述】:

我遵循this svelte 教程,我想知道我是否可以将此组绑定到 JSON 数组而不是简单数组,例如我想做一个行星选择器:

    <script>
        let planets = [{
                name: 'Jupiter',
                enable: false
            },
            {
                name: 'Saturn',
                enable: false
            },
            {
                name: 'Uran',
                enable: false
            },
            {
                name: 'Neptun',
                enable: false
            },
            {
                name: 'Pluto',
                enable: true
            },
        ];

        $: planets, console.log(planets)
    </script>

    {#each planets as planet}
        <label>
            <input type=checkbox bind:group={planets} name={planet.name} value={planet}>
            {planet.name}
        </label>
    {/each}

This 是一个 REPL。我想知道是否有一种方法可以在每个循环中正确绑定 JSON 数组(启用带有输入值的数组字段)。现在它会在您单击时弹出每个项目,正如您在 REPL 的 console.log 中看到的那样,我只想取消选中它。

使用 bind:checked 属性显示正确

<input type=checkbox bind:checked={planet.enable} value={planet}>

但这不会改变 array.enable 单击时的值。我可以在这里实现行星阵列的职责吗?

【问题讨论】:

    标签: arrays json svelte


    【解决方案1】:

    我认为问题在于您将值设置为行星。当您删除它并仅使用选中的属性时,数组会更新为正确的值。

    <script>
        let planets = [{
                name: 'Jupiter',
                enable: false,
            },
            {
                name: 'Saturn',
                enable: false
            },
            {
                name: 'Uran',
                enable: false
            },
            {
                name: 'Neptun',
                enable: false
            },
            {
                name: 'Pluto',
                enable: true
            },
        ];
            $: planets, console.log(planets)
    </script>
    
    {#each planets as planet}
        <label>
            <input type=checkbox bind:checked={planet.enable}>
            {planet.name}
        </label>
    {/each}
    

    您可以查看我的REPL

    这是更新的屏幕截图:

    【讨论】:

    • 感谢您的回复,但是如果我按照您的建议使用已检查的属性,它仍然不会改变行星数组(行 $: planets, console... 一遍又一遍地输出原始数组)
    • 你确定吗?对我来说,它输出启用属性更改的数组。 svelte.dev/repl/570853ca84cf4124a7744470e1bdb1a7?version=3.20.1
    • 如果我启用所有检查,它会在控制台日志中显示:Array(5)[ ▶ 0: Object { name: "Jupiter" ,enable: false } ▶ 1: Object { name: "Saturn " ,enable: false } ▶ 2: Object { name: "Uran" ,enable: false } ▶ 3: Object { name: "Neptun" ,enable: false } ▶ 4: Object { name: "Pluto" ,enable: true } length: 5 ] 唯一启用的是默认的(在这种情况下是冥王星)我也希望以这种方式反应,但我看不到它:)
    • 当您检查另一个时,启用属性更改为 true。我用屏幕截图更新了我的答案。
    • 这是github.com/sveltejs/svelte-repl/issues/80 中所述的 svelte REPL 控制台中的错误 - 请注意那些不依赖浏览器控制台日志的错误
    猜你喜欢
    • 1970-01-01
    • 2018-07-03
    • 2020-05-12
    • 1970-01-01
    • 2013-02-12
    • 2021-03-23
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多