Alpine.js — продолжаем знакомство

от автора

Это вторая статья о перспективном фреймворке Alpine.js.
Первую можно прочитать по ссылке:
Alpine.js — легковесный фреймворк с удобным синтаксисом

Продолжаем знакомить сообщество с этим замечательным инструментом.
Полный код урока здесь.

X-SHOW и X-CLOAK

<div x-data="{ show: false }">   <button x-on:click="show= ! show" x-text="show ? 'Скрыть' : 'Показать' ">   </button>   <p x-show="show" x-cloak>Привет!</p> </div> 

В примере выше разберем сразу две новые директивы. X-show хоть и похожа по применению с x-if, но не стоит их путать. X-show не меняет древо страницы, а только управляет свойством display у элемента. То есть элемент будет отрендерен, но не показан.

X-cloak это директива, которая удаляется сразу после инициации скрипта. Казалось бы, какой в ней толк? Рассмотрим практическое применение. Когда мы запускаем код выше, на какое-то мгновение мы видим элемент с текстом «Привет!», несмотря на значение false в директиве x-show. Тут нам на помощь приходит x-cloak, нужно только прописать ему следующий стиль:

[x-cloak] {    display: none; } 

Теперь элемент будет скрыт до начала работы скрипта.

Внезапное появление и исчезновение элемента не очень наглядно, поэтому для анимации этих событий используется модификатор .transition.

X-SHOW.TRANSITION

Улучшим предыдущий код с помощью модификаторов:

<div x-data="{ show: false }">   <button x-on:click="show= ! show" x-text="show ? 'Скрыть': 'Показать' ">   </button>   <p x-show="show"> NO TRANSITION</p>   <p x-show.transition="show">TRANSITION</p>   <p x-show.transition.in.duration.1000ms="show">TRANSITION IN</p>   <p x-show.transition.out.duration.1000ms="show">TRANSITION OUT</p>   <p x-show.transition.scale.05.duration.1000ms="show">TRANSITION Scale</p>   <p x-show.transition.opacity.in.duration.1000ms="show">TRANSITION Opacity</p>   <p x-show.transition.in.duration.1000ms.out.duration.500ms="show">TRANSITION IN Duration</p> </div>

Разные вариации использования мы расположили друг под другом и увеличили время действия до 1 секунды с помощью цепочки модификаторов .in.duration.1000ms

По умолчанию transition (без других модификаторов) использует для анимации свойства opacity и scale ( scale: 0.95), временную функцию cubic-bezier(0.4, 0.0, 0.2, 1), 150 миллисекунд для анимации появления и 75 для исчезновения. Эти изменения малозаметны для глаза, поэтому для наглядности мы удлинили действие последующих скриптов.

Дополнительные модификаторы позволяют разнообразить и подчеркнуть работу анимации:

  • .in позволяет установить только анимацию появления;
  • .out — для анимации исчезновения;
  • .scale — изменение в размерах элемента;
  • .opacity — для анимации прозрачности;
  • .duration задает продолжительность в миллисекундах.

Для анимации директивы x-if используется специальная директива x-transition. Она предоставляет еще более гибкий функционал и работает также и на x-show. Её мы рассмотрим в следующий раз. Для нетерпеливых есть ссылка .

X-INIT

X-init — директива, получающая блок кода, который вы хотите выполнить во время инициации компонента. Похожа на использование created во Vue.js. Основное применение это вычисление начальных значений в x-data. Рассмотрим ее на примере:

 <div   x-data="{ posts: [] }"   x-init="     fetch('https://jsonplaceholder.typicode.com/albums/1/photos')       .then((response) => {         return response.json();       })       .then((data) => {         posts = data       });     " >   <template x-for="post in posts" :key="post.id">     <div class="post">       <h1 x-text="post.title"></h1>       <img :src="post.thumbnailUrl" :alt="post.title" />     </div>   </template>   <hr/> </div> 

В x-data у нас есть объект posts, который по умолчанию не содержит ничего. В директиве x-init мы получаем данные с сервера с помощью функции fetch и после преобразования в json-формат присваиваем нашему объекту. Потом с помощью x-for можно отобразить полученные «посты» на странице.

X-REF и $REFS

Эта директива предоставляет доступ к нужному элементу в любой части страницы, в том числе и вне компонента. Все ссылки становятся доступными через глобальное поле $ref. Продемонстрируем эту возможность на примере:

<div x-data="{ }">   <input type="text" x-ref="myInput"/>   <button x-on:click="alert($refs.myInput.value)">Alert</button> <hr /> </div>

Текст введенный в input с атрибутом x-ref=«myInput» будет доступен в $refs.myInput.value

На этом наш сегодняшний урок закончен. Все примеры урока здесь.
Всем удачных проектов и до скорых встреч!

ссылка на оригинал статьи https://habr.com/ru/post/502540/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *