Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Отладка и частые проблемы

Большинство ошибок в Alpine сводится к трём причинам: опечатка в выражении, неверный порядок запуска и элементы, которые видны до старта Alpine. Здесь — как их распознать и исправить.

Сообщения в консоли

Если выражение в директиве падает, Alpine пишет в консоль предупреждение «Alpine Expression Error» с текстом ошибки, самим выражением и элементом:

<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
 
<div x-data="{ tasks: ['Купить молоко'] }">
  <p x-text="taks.length"></p>
</div>

Под примером видна ошибка: taks is not defined и выражение taks.length. Опечатка в имени — самая частая причина. В браузере откройте консоль инструментов разработчика: там сообщение кликабельно и ведёт к элементу.

x-cloak: мигание при загрузке

Скрипт Alpine запускается после того, как браузер показал HTML. Элементы с x-show="false" успевают мелькнуть на долю секунды: модальное окно или меню появляется и исчезает. Директива x-cloak прячет элемент, пока Alpine не запустится, — Alpine убирает её при старте. Но правило CSS для неё нужно добавить самим:

<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
 
<style>
  [x-cloak] { display: none !important; }
</style>
 
<div x-data="{ open: false }">
  <button @click="open = !open">Меню</button>
  <ul x-show="open" x-cloak>
    <li>Изменить</li>
    <li>Удалить</li>
  </ul>
</div>

Меню не появляется при загрузке страницы даже на медленном соединении. Правило [x-cloak] кладут в общий CSS сайта в <head>, а x-cloak ставят на всё, что скрыто по умолчанию.

Порядок запуска

ПризнакПричинаИсправление
Директивы не работают совсемНет defer у скрипта или не вызван Alpine.start()Добавить defer, вызвать Alpine.start()
todos is not definedAlpine.data зарегистрирован после стартаРегистрировать в alpine:init или до Alpine.start()
Плагин не работаетСкрипт плагина ниже AlpineПодключать плагины выше Alpine
Всё срабатывает дваждыAlpine подключён два разаОставить одно подключение

Посмотреть данные компонента

Чтобы увидеть, что сейчас лежит в данных, выведите их на страницу. JSON.stringify из урока «JSON» учебника делает объект читаемым:

<script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
 
<div x-data="{ title: '', tasks: ['Купить молоко'] }">
  <input x-model="title" placeholder="Новая задача">
  <pre x-text="JSON.stringify({ title, tasks }, null, 2)"></pre>
</div>

Блок <pre> показывает данные компонента и обновляется при вводе. В консоли браузера то же даёт Alpine.$data(элемент). Существуют и расширения для браузера, например Alpine.js devtools, которые показывают дерево компонентов.

Частая ошибка

Добавить x-cloak, но забыть правило CSS. Сам по себе атрибут ничего не прячет — это обычный атрибут, который Alpine удаляет при старте. Без правила [x-cloak] { display: none !important; } мигание остаётся. Если правило есть, а элемент не появляется никогда, проверьте, что Alpine вообще запустился: скорее всего, скрипт не загрузился.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.