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=为每个可能的结果创建单独的块,但这是大量的工作。
从 Svelte 2.13 你也可以做
<div class:selected={index === currentIndex}>...</div>
Run Code Online (Sandbox Code Playgroud)
见https://svelte.dev/docs#class_name
块({#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]选择器的样式。