【问题标题】:Svelte component attribute dynamic valueSvelte 组件属性动态值
【发布时间】:2020-05-21 13:33:01
【问题描述】:

在此处查看示例:https://svelte.dev/repl/7fd322d6b7d641359774de781f013f45?version=3.18.1

我正在尝试通过检查组件的 id 是否与所选的 id 匹配来使组件的属性值动态化:

App.svelte

<script>
    import BanjoPlayer from './BanjoPlayer.svelte'
    let banjoPlayers = [{id: 1, name:'Scruggs'},{id: 2, name:'Pickelny'}]
    let selectedBP = 0
</script>
<ul>
{#each banjoPlayers as bp (bp.id)}
    <BanjoPlayer on:click="{e => selectedBP = bp.id}" {...bp} selected="{selectedBP === bp.id}" />
{/each} 
</ul>

BanjorPlayer.svelte

export let name
export let id
export let selected
</script>

<li on:click class:selected >
    {name} ({id})
</li>

我在 REPL 中加入了另外两个尝试:一个我认为可能有效(但不可行)的替代方案和一个有效但肯定不理想的替代方案。

【问题讨论】:

    标签: svelte


    【解决方案1】:

    这是一个错误,据我所知,它应该可以工作。

    这显然与{...bp} 的传播有关。

    没有展开的等效代码按预期工作:

    <script>
        import BanjoPlayer from './BanjoPlayer.svelte'
        let banjoPlayers = [{id: 1, name:'Scruggs'},{id: 2, name:'Pickelny'}]
        let selectedBP = 0
    
        function isSelected(id) {
            console.log(id);
            return selectedBP === id
        }
    </script>
    
    <h2>
        The selcted player id is: {selectedBP}
    </h2>
    
    <p>
    <em>How I want it to work:</em>
    </p>
    <ul>
    {#each banjoPlayers as bp (bp.id)}
        <BanjoPlayer on:click="{e => selectedBP = bp.id}" selected="{selectedBP === bp.id}" id={bp.id} name={bp.name} />
    {/each} 
    </ul>
    

    REPL

    【讨论】:

    • 啊!谢谢里克索。你认为我应该提交一个新问题吗?
    • 是的,如果您愿意,那就完美了。我已经在 Discord 频道上确认这是一个错误。有人发了a REPL that pinpoints the problem,你可以用它。否则我会做。如果你能确认一种或另一种方式,那就太好了,这样我们就不会迷失方向。
    猜你喜欢
    • 2016-08-06
    • 2021-06-06
    • 2021-10-29
    • 2018-08-04
    • 1970-01-01
    • 2019-12-26
    • 2018-01-06
    • 1970-01-01
    • 2012-07-08
    相关资源
    最近更新 更多