Slim.js — это легковесная JavaScript-библиотека для создания веб-компонентов с декларативным синтаксисом. Основной механизм управления поведением компонентов в Slim.js — это директивы, которые позволяют связывать данные с DOM, управлять условным рендерингом, циклическим выводом и реактивностью.
Встроенные директивы Slim.js обеспечивают базовую функциональность без необходимости подключения сторонних библиотек.
sl-if — условный
рендерингДиректива sl-if управляет отображением элемента в
зависимости от логического выражения. Если выражение истинно, элемент
рендерится в DOM; если ложно — удаляется.
<div sl-if="isVisible">
Этот блок отображается только если isVisible === true
</div>
Ключевые моменты:
sl-if реагирует на изменения данных автоматически.sl-for — циклический
рендерингДиректива sl-for используется для повторного создания
элементов на основе массива данных.
<ul>
<li sl-for="item in items">
{{item.name}}
</li>
</ul>
Особенности работы sl-for:
sl-for создает отдельный экземпляр элемента для каждого
элемента массива.item, index in items.push, splice,
sort) автоматически отражаются в DOM.<li sl-for="item, idx in items">
{{idx}}: {{item.name}}
</li>
sl-bind —
привязка атрибутов и свойствДиректива sl-bind используется для динамического
связывания атрибутов HTML с данными компонента.
<input type="text" sl-bind:value="username">
<img sl-bind:src="user.avatarUrl">
Суть работы:
class,
style, src, href.sl-on — обработка
событийsl-on обеспечивает декларативное добавление обработчиков
событий.
<button sl-on:click="handleClick">Нажми меня</button>
Особенности:
click,
input, change, submit).sl-on:click="handleClick(item.id)".handleClick(id) {
console.log("Нажат элемент с ID:", id);
}
sl-model —
двусторонняя привязка данныхДиректива sl-model реализует двустороннюю привязку для
форм.
<input type="text" sl-model="username">
Принципы работы:
username.input, textarea,
select.sl-class и
sl-style — динамические стилиДирективы sl-class и sl-style позволяют
динамически управлять CSS-классами и inline-стилями.
<div sl-class="{active: isActive, hidden: !isVisible}">
Блок с динамическими классами
</div>
<div sl-style="{color: textColor, 'font-size': fontSize + 'px'}">
Блок с динамическими стилями
</div>
Особенности:
sl-class объект ключ:значение определяет наличие
класса.sl-style ключи соответствуют CSS-свойствам, а
значения — переменные или выражения.sl-ref — ссылка на
DOM-элементДиректива sl-ref позволяет получить прямой доступ к
DOM-элементу внутри компонента.
<input sl-ref="searchInput" type="text">
this.searchInput.focus();
Преимущества:
Slim.js оптимизирует обновление DOM, применяя виртуальный DOM и минимальные изменения при ререндеринге. Все встроенные директивы полностью интегрированы с реактивной системой:
sl-if и sl-for удаляют и создают элементы
только при изменении состояния.sl-bind, sl-model, sl-class,
sl-style обновляют только измененные атрибуты.sl-on привязываются один раз и остаются
активными на протяжении жизни компонента.Эта оптимизация обеспечивает высокую производительность даже при больших объемах данных и сложной структуре компонентов.
В Slim.js директивы можно комбинировать для создания сложных реактивных интерфейсов.
<ul>
<li sl-for="item in items" sl-if="item.visible" sl-class="{selected: item.id === selectedId}">
<span>{{item.name}}</span>
<button sl-on:click="selectItem(item.id)">Выбрать</button>
</li>
</ul>
Результат:
item.visible === true.Эта система встроенных директив делает Slim.js мощным инструментом для построения модульных, реактивных и производительных компонентов с минимальным объёмом кода. Их грамотное использование позволяет создавать гибкие интерфейсы, поддерживающие сложные сценарии динамического рендеринга и взаимодействия с пользователем.