<div x-data="{ message: 'Привет, Alpine!' }"> <p x-text="message"></p></div>
Учебный тур
Alpine.js — это минималистичный JavaScript-фреймворк, предназначенный для добавления интерактивности на веб-страницы. Он позволяет создавать динамические интерфейсы прямо в HTML с помощью декларативных атрибутов, что делает его простым и удобным инструментом.
-
Для начала работы достаточно подключить Alpine.js через CDN. Вот базовый пример:
<!DOCTYPE html><html lang="ru"><head><meta charset="UTF-8"><title>Alpine.js: Начало</title><script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script></head><body><h1>Добро пожаловать в Alpine.js!</h1></body></html>Атрибут
defer
обеспечивает загрузку скрипта после разбора HTML.Создайте файл
index.html
, поместите в него указанный выше код, и откройте файл в браузере.В этот файл мы будем добавлять дальнейшие примеры.
Alpine.js использует директивы для управления данными и поведением. Основная директива — x-data
, которая задает область данных.
-
x-data
определяет объект с переменнойmessage
.x-text
отображает значениеmessage
внутри элемента.
-
Директива
x-model
связывает данные с полями ввода:<div x-data="{ name: '' }"><input type="text" x-model="name" placeholder="Введите имя"><p>Привет, <span x-text="name"></span>!</p></div>Привет, !
При вводе текста в поле значение
name
обновляется автоматически.
Alpine.js предоставляет директивы x-show
, x-if
и x-for
для управления отображением элементов.
-
<div x-data="{ isVisible: false }"><button @click="isVisible = !isVisible">Переключить</button><p x-show="isVisible">Скрытый текст!</p></div>
Скрытый текст!
x-show
скрывает или показывает элемент в зависимости от условия.@click
— это сокращение дляx-on:click
.
-
<div x-data="{ items: ['Яблоко', 'Банан', 'Груша'] }"><ul><template x-for="item in items"><li x-text="item"></li></template></ul></div>
Директива x-on
(или @
) позволяет привязывать обработчики событий.
-
<div x-data="{ count: 0 }"><button @click="count++">Увеличить счётчик<span x-text="count"></span></button></div>
Каждый клик увеличивает значение
count
. -
Модификатор
.prevent
предотвращает стандартное поведение:<form x-data><input type="submit" @click.prevent="alert('Отправка формы остановлена')"></form>Поэкспериментируйте с другими модификаторами.
Состояние в Alpine.js хранится в x-data
и является реактивным — изменения автоматически обновляют DOM.
-
<div x-data="{ email: '', password: '' }"><input type="email" x-model="email" placeholder="Имейл"><input type="password" x-model="password" placeholder="Пароль"><button @click="alert('Имейл: ' + email + ', Пароль: ' + password)">Войти</button></div>
Введённые данные доступны через переменные
email
иpassword
.Попробуйте добавить ещё какие-нибудь поля, по аналогии.
Alpine.js позволяет создавать переиспользуемые компоненты с изолированным состоянием.
-
<div x-data="counter()"><button @click="increment">Увеличить счётчик<span x-text="count"></span></button></div><div x-data="counter()"><button @click="increment">Увеличить другой счётчик<span x-text="count"></span></button></div><script>function counter() {return {count: 0,increment() {this.count++;}}}</script>
Функция
counter
определяет логику компонента, который можно использовать многократно.
Директива x-transition
добавляет анимации к элементам.
-
<div x-data="{ show: false }"><button @click="show = !show">Переключить</button><div x-show="show" x-transition><p>Я появляюсь плавно!</p></div></div>
Я появляюсь плавно!
Элемент появляется с анимацией по умолчанию.
Попробуйте настроить эффекты анимации с помощью CSS.
Урок 8: Работа с AJAX и асинхронными запросами
Заголовок раздела «Урок 8: Работа с AJAX и асинхронными запросами»Директива x-init
выполняет код при инициализации компонента, что удобно для загрузки данных.
-
<div x-data="{ posts: [] }" x-init="fetch('https://jsonplaceholder.typicode.com/posts?_limit=10').then(response => response.json()).then(data => posts = data)"><ul><template x-for="post in posts"><li x-text="post.title"></li></template></ul></div>
Попробуйте реализовать другие методы API с помощью сервиса JSONPlaceholder.
Alpine.js предлагает дополнительные инструменты, такие как x-ref
и x-effect
.
-
<div x-data><input type="text" x-ref="input" placeholder="Введите текст"><button @click="$refs.input.focus()">Фокус</button></div>
$refs
предоставляет доступ к DOM-элементам. -
<div x-data="{ text: '' }"><input type="text" x-model="text" placeholder="Введите текст"><p x-effect="$el.textContent = text ? 'Вы ввели: ' + text : 'Начните вводить текст'"></p></div>
Параграф автоматически обновляется благодаря
x-effect
.
Урок 10: Практический проект — Список дел
Заголовок раздела «Урок 10: Практический проект — Список дел»Создайте простое приложение для управления задачами:
- Задачи должны хранятся в массиве
todos
. - Новые задачи должны добавляться через метод
addTodo
. - Удаление задач должно осуществляться через метод
removeTodo
. - Данные должны сохраняться в
localStorage
.
-
<div x-data="todoApp()"><input type="text" x-model="newTodo" @keyup.enter="addTodo" placeholder="Новая задача"><ul><template x-for="(todo, index) in todos" :key="index"><li><input type="checkbox" x-model="todo.completed"><span x-text="todo.text" :class="{ 'line-through': todo.completed }"></span><button @click="removeTodo(index)">Удалить</button></li></template></ul></div>
-
Допишите код, чтобы проект заработал:
<script>function todoApp() {return {todos: JSON.parse(localStorage.getItem('todos')) || [],newTodo: '',addTodo() {},removeTodo(index) {},saveTodos() {}}}</script> -
Посмотреть
<script>function todoApp() {return {todos: JSON.parse(localStorage.getItem('todos')) || [],newTodo: '',addTodo() {if (this.newTodo.trim()) {this.todos.push({ text: this.newTodo, completed: false });this.newTodo = '';this.saveTodos();}},removeTodo(index) {this.todos.splice(index, 1);this.saveTodos();},saveTodos() {localStorage.setItem('todos', JSON.stringify(this.todos));}}}</script>
Этот курс охватывает все основные аспекты Alpine.js, от базового синтаксиса до создания полноценного приложения. Попробуйте повторить примеры и экспериментируйте с кодом, чтобы закрепить знания!