首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Svelte中部分HTML元素的条件呈现

Svelte中部分HTML元素的条件呈现
EN

Stack Overflow用户
提问于 2022-03-05 06:07:36
回答 1查看 235关注 0票数 1

例如,假设我想为一组单选按钮创建一个组件:

代码语言:javascript
复制
<!-- App.Svelte --> 
<script>
    import Radio from './Radio.svelte';
</script>

<main>
    <Radio group={"stooges"}
        btns={["Larry", "Curly", "Moe", "Shep", "Joe", "Curley Joe"]}
        checked={"Curly"}
        disabled={["Moe", "Joe"]}
    />
</main>

无线电组组件的下列实现会产生正确的行为;Curly是预选的;MoeJoe是灰色的:

代码语言:javascript
复制
<!-- Radio.svelte -->
<script>
  export let group;
  export let btns;
  export let checked;
  export let disabled;
</script>

{#each btns as btn, idx}
  {#if btn === checked}
    {#if disabled.includes(btn)}
      <input type="radio" id={btn} value={btn} name={group} 
        checked disabled>
    {:else}
      <input type="radio" id={btn} value={btn} name={group} checked>
    {/if}
  {:else}
    {#if disabled.includes(btn)}
      <input type="radio" id={btn} value={btn} name={group} disabled>
    {:else}
      <input type="radio" id={btn} value={btn} name={group}>
    {/if}
  {/if}
  <label for={btn}>{btn}</label>
{/each}

以下是无线电组组件的另一个实现,它更简洁,但不会编译:

代码语言:javascript
复制
<!-- Radio.svelte -->
<script>
  export let group;
  export let btns;
  export let checked;
  export let disabled;
</script>

{#each btns as btn, idx}
  <input type="radio" id={btn} value={btn} name={group}
    {#if btn === checked} checked {/if}
    {#if disabled.includes(btn)} disabled {/if} 
  >
  <label for={btn}>{btn}</label>
{/each}

编译器用消息#if标记第一个Expected } svelte(unexpected-token)语句的开头大括号。

对于第二个实现中的错误,我能想到的唯一原因是,与第一个实现不同,第一个实现在每个if-else分支上包含一个完整的if-else元素,第二个实现在每个if-else分支上包含一个input元素的一部分。然而,据我所知,Svelte文档并不会对此发出警告。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-05 08:01:11

不能使用模板语法({#if}..{:else}..{/if}{#each}..{/each}等)内部元素/组件标记。

但是,您可以根据条件(这正是您要实现的)来实现元素/组件属性的解析:

代码语言:javascript
复制
{#each btns as btn, idx}
  <input
    type="radio"
    id={btn}
    value={btn}
    name={group}
    checked={btn === checked}
    disabled={disabled.includes(btn)}
  >
  <label for={btn}>{btn}</label>
{/each}

根据相应的语句评估,checkeddisabled将被指定为true或false。

演示REPL

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71359919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档