<div x-data="{ input: 'Какой-нибудь текст' }"> <input class="mb-2" x-model="input"> <button type="button" @click="$clipboard(input)"> Скопировать в буфер </button></div>
Clipboard
Этот плагин добавляет новое магическое свойство $clipboard
во все ваши компоненты Alpine, которое можно использовать для копирования любого фрагмента данных в буфер обмена пользователя.
Установка
Вы можете использовать этот плагин, включив его из тега <script>
или установив с помощью менеджера пакетов.
Через CDN
Вы можете подключить CDN-сборку этого плагина с помощью тега <script>
, только подключать нужно ДО основного JS-файла Alpine.
<!-- Clipboard Plugin --><script defer src="https://cdn.jsdelivr.net/npm/@ryangjchandler/alpine-clipboard@latest/dist/alpine-clipboard.min.js"></script>
<!-- Alpine Core --><script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3/dist/cdn.min.js"></script>
<!-- Clipboard Plugin --><script defer src="https://unpkg.com/@ryangjchandler/alpine-clipboard@2/dist/alpine-clipboard.js"></script>
<!-- Alpine Core --><script defer src="https://unpkg.com/alpinejs@3/dist/cdn.min.js"></script>
Через менеджер пакетов
Вы можете установить Clipboard для использования внутри вашей сборки следующим образом:
npm i @ryangjchandler/alpine-clipboard
pnpm add @ryangjchandler/alpine-clipboard
yarn add @ryangjchandler/alpine-clipboard
Затем инициализируйте его в своей сборке:
import Alpine from 'alpinejs';import Clipboard from '@ryangjchandler/alpine-clipboard'
Alpine.plugin(Clipboard);Alpine.start();
Использование
Чтобы скопировать некоторые данные в буфер обмена, вызовите $clipboard
из обработчика события в вашем компоненте:
Директива
В этот пакет также входит директива x-clipboard
, которую можно добавить к любому элементу (обычно кнопке), и она будет копировать результат выражения при нажатии.
<div x-data="{ input: 'Фу!' }"> <button x-clipboard="input"> Скопировать в буфер </button></div>
Если вы выполняете рендеринг на сервере, вы можете предпочесть скопировать необработанное содержимое вместо того, чтобы оценивать выражение как JavaScript. Это можно сделать, добавив к директиве модификатор .raw
.
Вот фрагмент разметки Laravel Blade для примера:
<button x-clipboard.raw="{{ $post->url() }}"> Скопировать в буфер</button>
Объект и массив
Поскольку в функцию $clipboard
можно передавать любые свойства, если вы передадите объект или массив, то перед копированием в буфер обмена он будет пропущен через JSON.stringify
:
<div x-data="{ items: ['foo', 'bar'] }"> <button type="button" @click="$clipboard(items)"> Скопировать в буфер </button></div>
Теперь буфер обмена будет содержать ["foo", "bar"]
.
Хуки
При установке этого пакета через npm можно использовать метод Clipboard.configure()
, чтобы прикрепить хук onCopy
к буферу обмена:
import Clipboard from '@ryangjchandler/alpine-clipboard'
Alpine.plugin(Clipboard.configure({ onCopy: () => { console.log('Скопировано!') }}))