Alpine 的**x-for
**指令允许你通过遍历列表的方式来创建 DOM 元素。这里有一个简单的例子,使用它来创建一个基于数组的颜色列表。
<ul x-data="{ colors: ['红', '橙', '黄'] }">
<template x-for="color in colors">
<li x-text="color"></li>
</template>
</ul>
关于**x-for
**指令有两个规则值得注意:
**
x-for
必须在<template>
元素上声明 该<template>
**元素必须只有一个子元素
如果你要对项目进行重新排序,那么为每个**x-for
**遍历的数据指定唯一的键是很重要的。如果没有唯一的键,Alpine 可能很难跟踪哪些内容重新排序了,并会导致奇怪的错误。
<ul x-data="{ colors: [
{ id: 1, label: '红' },
{ id: 2, label: '橙' },
{ id: 3, label: '黄' },
]}">
<template x-for="color in colors" :key="color.id">
<li x-text="color.label"></li>
</template>
</ul>
现在,如果**colors**
被添加,删除,重新排序,或者它们的**id
** 发生变化,Alpine 将会相应的保留或销毁遍历的**<li>**
元素。
如果你需要访问遍历的每一项的索引,你可以使用**([item], [index]) in [items]
**语法,如下所示:
<ul x-data="{ colors: ['红', '橙', '黄'] }">
<template x-for="(color, index) in colors">
<li>
<span x-text="index + ': '"></span>
<span x-text="color"></span>
</li>
</template>
</ul>
你也可以通过**:key
**来指定表达式中的索引。
<template x-for="(color, index) in colors" :key="index">
如果你只是想简单地循环**n
**次,而不是遍历数组,Alpine 提供了一个简短的语法。
<ul>
<template x-for="i in 10">
<li x-text="i"></li>
</template>
</ul>
**i
**在这种情况下可以命名为任何合法的变量名。