Svelte条件元素类报告为语法错误

mik*_*ana 1 javascript css svelte

if根据Svelte指南针对if块制作一个。看起来很简单,但是Svelte认为这是语法错误:

[!] (svelte plugin) ParseError: Unexpected character '#'
public\js\templates\works.html
3:     <div class="slides js_slides">
4:       {#each works as work, index}
5:         <div class="js_slide {#if index === currentIndex }selected{/if} {#if index === 0 }first{/if}">
                                ^
6:           <img src="/images/work/screenshots/{ works[index].slug }-0.{ works[index].imageExtension }"/>
7:         </div>
Run Code Online (Sandbox Code Playgroud)

为什么{#if index === currentIndex }无效?我该如何在Svelte做有条件的?

我不能class=每个可能的结果创建单独的块,但这是大量的工作。

oae*_*oae 9

从 Svelte 2.13 你也可以做

<div class:selected={index === currentIndex}>...</div>
Run Code Online (Sandbox Code Playgroud)

https://svelte.dev/docs#class_name


Ric*_*ris 5

块({#if...{#each...等)不能在属性内部使用-它们只能定义标记的结构。

相反,约定是使用三元表达式...

<div class="
  js_slide
  {index === currentIndex ? 'selected' : ''}
  {index === 0 ? 'first' : ''}
">
  <img src="/images/work/screenshots/{ works[index].slug }-0.{ works[index].imageExtension }"/>
</div>
Run Code Online (Sandbox Code Playgroud)

...或使用助手:

<!-- language: lang-html -->

<div class="js_slide {getClass(work, index, currentIndex)}">
  <img src="/images/work/screenshots/{ works[index].slug }-0.{ works[index].imageExtension }"/>
</div>
Run Code Online (Sandbox Code Playgroud)

有些人更喜欢使用data-selected={index === currentIndex}和选择data=first={index === 0}基于[data-selected=true]选择器的样式。