Директива s:foreach является основным инструментом для
динамического создания списков элементов в Slim.js. Она позволяет
перебрать массив данных и сгенерировать для каждого элемента
соответствующий фрагмент DOM, сохраняя реактивность и синхронизацию с
моделью данных.
<ul>
<li s:foreach="item in items">
{item.name}
</li>
</ul>
item — локальная переменная, представляющая текущий
элемент массива.items — реактивный массив в компоненте.<li> будет клонироваться для каждого
элемента массива, автоматически обновляясь при изменении
items.Особенности:
key, value in object).s:foreach можно использовать любые Slim.js
выражения, включая фильтры и методы компонента.Slim.js позволяет получить индекс текущего элемента при переборе:
<ul>
<li s:foreach="(item, index) in items">
{index}: {item.name}
</li>
</ul>
index — порядковый номер элемента в массиве.key:<ul>
<li s:foreach="(value, key) in userRoles">
{key} → {value}
</li>
</ul>
Использование ключей важно для поддержания стабильности DOM при динамическом обновлении данных.
S:foreach тесно интегрирован с реактивной системой
Slim.js. Изменения в массиве автоматически отражаются на DOM без
необходимости ручного перерисовывания:
push, unshift или splice
мгновенно создаёт новые DOM-узлы.Пример динамического обновления:
export default class MyComponent extends Slim {
items = [{ name: 'Apple' }, { name: 'Banana' }];
addItem() {
this.items.push({ name: 'Cherry' });
}
}
При вызове addItem() список <ul>
автоматически расширится новым элементом без перезагрузки всего
списка.
s:foreach поддерживает вложенные циклы,
что позволяет создавать сложные структуры, например таблицы или
иерархические списки:
<ul>
<li s:foreach="category in categories">
{category.name}
<ul>
<li s:foreach="item in category.items">
{item.name}
</li>
</ul>
</li>
</ul>
Каждый вложенный цикл полностью независим, поддерживает собственный индекс и реактивность.
Для массивов объектов желательно использовать директиву
s:key, чтобы Slim.js мог точно отслеживать изменения и не
пересоздавать DOM без необходимости:
<ul>
<li s:foreach="item in items" s:key="item.id">
{item.name}
</li>
</ul>
s:key принимает уникальный идентификатор элемента.Директива s:foreach легко интегрируется с
пользовательскими компонентами:
<user-card s:foreach="user in users" s:key="user.id" user="{user}"></user-card>
users передаётся в отдельный
компонент user-card.Можно комбинировать s:foreach с условными выражениями
для фильтрации данных:
<ul>
<li s:foreach="item in items" s:if="item.active">
{item.name}
</li>
</ul>
s:if применяется к каждому элементу цикла.item.active DOM обновляется
автоматически.s:key при работе с массивами
объектов для корректного обновления DOM.Директива s:foreach в Slim.js сочетает простоту
синтаксиса с высокой производительностью, позволяя создавать
динамические списки и иерархические структуры данных с полной
реактивностью. Ее гибкость и интеграция с компонентами делает Slim.js
мощным инструментом для построения интерфейсов с минимальными
усилиями.