Slim.js — это лёгкая библиотека для создания компонентов на JavaScript с декларативным подходом к построению интерфейсов. Основу её работы составляют шаблоны, которые описывают структуру DOM и связывают данные с представлением. Шаблоны Slim.js используют синтаксис, напоминающий HTML, но с расширенными возможностями для реактивности и управления состоянием.
Шаблон в Slim.js создаётся с помощью тега
<template> и директивы slim-component.
Например:
<template id="my-component" slim-component>
<div>
<h1>{{title}}</h1>
<p>{{description}}</p>
</div>
</template>
{{title}} и
{{description}} — привязки данных, которые
автоматически обновляют DOM при изменении соответствующих свойств
компонента.slim-component указывает на то, что шаблон
является компонентом Slim.js.В Slim.js используется реактивная система привязки данных. Примеры синтаксиса:
{{property}}
заменяется значением свойства компонента.<img src="{{imageUrl}}"> динамически меняет атрибут
src.<div class="{{{className}}}" style="{{{styleObject}}}"></div>
Тройные фигурные скобки {{{ }}} позволяют вставлять
объектные значения или HTML без экранирования.
Slim.js поддерживает условное отображение через директиву
slim-if:
<div slim-if="isVisible">
<p>Элемент отображается только если isVisible === true</p>
</div>
slim-if принимает булевое выражение.Для альтернативного ветвления используется
slim-else:
<div slim-if="isLoggedIn">Привет, пользователь!</div>
<div slim-else>Пожалуйста, войдите в систему</div>
Для рендеринга массивов или коллекций используется директива
slim-for:
<ul>
<li slim-for="item in items">{{item.name}}</li>
</ul>
item — локальная переменная для текущего элемента
массива.items — свойство компонента, содержащее массив
объектов.push, splice, map).Можно добавлять индекс:
<li slim-for="(item, index) in items">{{index}}. {{item.name}}</li>
Slim.js позволяет связывать события с методами компонента через
синтаксис on:event:
<button on:click="handleClick">Нажми меня</button>
handleClick — метод, объявленный в компоненте:class MyComponent extends Slim {
title = "Пример";
handleClick() {
console.log("Кнопка нажата");
}
}
customElements.define('my-component', MyComponent);
event, если
метод принимает параметр.Slim.js поддерживает слоты для передачи контента в компоненты:
<my-component>
<p slim-slot="footer">Нижний колонтитул</p>
</my-component>
slim-slot связывает содержимое с
соответствующим местом в шаблоне компонента.<slot name="footer"></slot>.Вложенные компоненты создаются обычным образом, используя пользовательские теги с зарегистрированными компонентами.
Привязки могут включать простые вычисления и условия:
<p>{{count > 0 ? 'Есть элементы' : 'Нет элементов'}}</p>
{{}} пересчитываются при изменении
зависимых свойств.Помимо стандартной интерполяции, Slim.js позволяет динамически управлять классами и стилями:
<div class="{{isActive ? 'active' : 'inactive'}}" style="color: {{color}};"></div>
Директивы slim-if, slim-for и обработчики
событий можно комбинировать:
<ul>
<li slim-for="item in items" slim-if="item.visible" on:click="selectItem(item)">
{{item.name}}
</li>
</ul>
item.visible === true.{{}} и {{{}}}.slim-if, slim-else,
slim-for для условной логики и циклов.on:event.Синтаксис шаблонов Slim.js сочетает простоту HTML с мощью реактивной системы, позволяя создавать динамические интерфейсы без громоздкого кода и прямого манипулирования DOM.