x-for
x-for
指令允许通过遍历列表来创建 DOM 元素。
下面是使用它创建基于数组的颜色列表的简单示例:
html
<ul x-data="{ colors: ['Red', 'Orange', 'Yellow'] }">
<template x-for="color in colors">
<li x-text="color"></li>
</template>
</ul>
有两个规则值得注意 x-for
:
x-for
必须在<template>
元素上声明<template>
元素必须只有一个子元素
索引
如果要对 x-for
指令遍历的数据进行重新排序,请务必为每次迭代指定唯一的索引键。
如果没有唯一的索引键,Alpine 很难跟踪重新排序的内容并会导致排序错误。
html
<ul x-data="{ colors: [
{ id: 1, label: 'Red' },
{ id: 2, label: 'Orange' },
{ id: 3, label: 'Yellow' },
]}">
<template x-for="color in colors" :key="color.id">
<li x-text="color.label"></li>
</template>
</ul>
现在,如果 colors
被添加、删除、重新排序,或者它们的 id
发生变化,Alpine 将 <li>
相应的保留或销毁迭代元素。
访问索引
html
<ul x-data="{ colors: ['Red', 'Orange', 'Yellow'] }">
<template x-for="(color, index) in colors">
<li>
<span x-text="`${index} : ${color}`"></span>
</li>
</template>
</ul>
也可以通过动态 :key
指定表达式中的索引。
html
<template x-for="(color, index) in colors" :key="index">
遍历范围
如果需要简单的循环 N 多次,而不是遍历数组,Alpine 提供了一个简短的语法。
html
<ul x-data>
<template x-for="i in 5">
<li x-text="i"></li>
</template>
</ul>
i
在这种情况下可以命名为任意的合法变量名。