<ul x-data="{ colors: ['Красный', 'Оранжевый', 'Жёлтый'] }"> <template x-for="color in colors"> <li x-text="color"></li> </template></ul>x-for
Директива Alpine x-for позволяет создавать элементы DOM путём перебора списка. Вот простой пример её использования для создания списка цветов на основе массива.
Вы также можете передавать объекты в x-for.
<ul x-data="{ car: { make: 'Внедорожник', model: 'Grand Cherokee', color: 'чёрный' } }"> <template x-for="(value, index) in car"> <li><span x-text="index"></span>: <span x-text="value"></span></li> </template></ul>- :
В отношении x-for стоит отметить два правила:
Если вы собираетесь переупорядочивать элементы, важно указывать уникальные ключи для каждой итерации 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>Теперь, если цвета добавляются, удаляются, переупорядочиваются или изменяются их идентификаторы, 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"></template>Если вам нужно просто выполнить цикл n раз, а не перебирать массив, Alpine предлагает сокращённый синтаксис.
<ul> <template x-for="i in 10"> <li x-text="i"></li> </template></ul>i в данном случае можно назвать как угодно.
Как упоминалось выше, тег <template> должен содержать только один корневой элемент.
Например, следующий код не будет работать:
<div x-data="{ colors: ['Красный', 'Жёлтый', 'Оранжевый'] }"> <template x-for="color in colors"> <span>Следующий цвет: </span><span x-text="color"></span> </template></div>А этот код заработает:
<div x-data="{ colors: ['Красный', 'Жёлтый', 'Оранжевый'] }"> <template x-for="color in colors"> <p> <span>Следующий цвет: </span><span x-text="color"></span> </p> </template></div>Следующий цвет:
Правильный вариант использования x-for…
Выберите все подходящие варианты.
-
Цикл по массиву внутри template
<ul x-data="{ numbers: [1, 2, 3] }"><template x-for="number in numbers"><li x-text="number"></li></template></ul>
x-forобъявлена на<template>с единственным корневым элементом внутри — оба правила соблюдены. -
x-for прямо на элементе li
<ul x-data="{ numbers: [1, 2, 3] }"><li x-for="number in numbers" x-text="number"></li></ul>
Директиву нельзя объявлять прямо на элементе:
x-forработает только на<template>. -
Перебор диапазона с доступом к индексу
<ul x-data><template x-for="(_, i) in 3"><li x-text="i + 1"></li></template></ul>
Сокращённый синтаксис для диапазона тоже допустим, а
x-dataбез значения задаёт нужную область видимости.
Прогресс викторины
0 / 0 вопросов отвечено (0%)
0 верно
Ваш результат
0%
0 / 0 верно