我正在根据Svelte Guide for if blocks进行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>
为什么{#if index === currentIndex }
无效?如何在Svelte中进行条件处理?
不是我可以为每个可能的结果创建单独的class=
块,但这是大量的工作。
答案 0 :(得分:2)
从Svelte 2.13开始,您也可以这样做
<div class:selected={index === currentIndex}>...</div>
答案 1 :(得分:1)
在属性内部不能使用块({#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>
...或使用助手:
<!-- language: lang-html -->
<div class="js_slide {getClass(work, index, currentIndex)}">
<img src="/images/work/screenshots/{ works[index].slug }-0.{ works[index].imageExtension }"/>
</div>
有些人喜欢做data-selected={index === currentIndex}
和data=first={index === 0}
之类的事情,而改用基于[data-selected=true]
选择器的样式。