Angular Sortable-список и Drag & Drop | ng-hub-ui-sortable

Sortable-список и утилиты drag-and-drop для Angular для массивов, интеграции с FormArray, рабочих процессов на Signals и связанных списков.

Справочник API

Вот полный контракт sortable: всё, что можно привязать, прослушать, спроецировать и тематизировать, собрано в одном месте. Подключите то, что нужно, и оформите так, как хотите — это standalone и дружит с сигналами.

Входные свойства

Настройте sortable с помощью 39 входных свойств. Привязывайте их, как любой @Input в Angular.

ИмяТипПо умолчаниюОписание
hubSortableSortableData<T> | SortableBindings—Данные, связанные с сортируемым контейнером: массив, реактивный `FormArray` или записываемый сигнал. Остаются в синхроне с перетаскиванием. Необязателен: голый атрибут `hubSortable` тоже включает директиву, и тогда выходы сообщают о каждом перемещении, ничего не изменяя.
optionsOptions—Полный объект опций SortableJS. Любую опцию SortableJS также можно привязать напрямую как отдельный input (например `handle`, `animation` или `group`).
autoUpdateArraybooleantrueПри `true` (по умолчанию) директива автоматически изменяет привязанный массив после каждого перетаскивания. Установите `false` для ручного управления и обновляйте массив самостоятельно.
cloneFunction(item: T) => T—Функция для клонирования элемента, когда группа настроена в режиме `pull: 'clone'`.
containerstring—CSS-селектор вложенного элемента, который должен стать сортируемым, когда хост оборачивает реальный список.
keyboardSortingbooleantrueПереупорядочивание с клавиатуры, включено по умолчанию. Каждый элемент становится точкой табуляции: `Enter` или `Пробел` берёт его, стрелки перемещают, `Home` и `End` отправляют к краям, а `Escape` возвращает на место. Установите `false`, если приложение предоставляет собственный клавиатурный путь.
keyboardMessagesPartial<SortableKeyboardMessages>—Заменяет фразы, которые переупорядочивание с клавиатуры объявляет через живую область. Всё, что не указано, сохраняет английский текст по умолчанию.
groupOptions['group']—Имя группы или объект конфигурации для соединения нескольких списков и управления тем, какие из них могут отдавать или получать элементы.
sortboolean—Включает или отключает изменение порядка элементов внутри списка.
delaynumber—Сколько миллисекунд нужно удерживать указатель, прежде чем начнётся перетаскивание. По умолчанию `0`; увеличьте на сенсорных экранах, чтобы короткое нажатие прокручивало, а не тащило.
disabledboolean—Отключает поведение сортировки без удаления директивы.
draggablestring—CSS-селектор, ограничивающий, какие дочерние элементы можно перетаскивать.
handlestring—CSS-селектор элемента внутри каждого пункта, который запускает перетаскивание, оставляя остальное интерактивным.
animationnumber—Длительность анимации переупорядочивания в миллисекундах.
ghostClassstring—CSS-класс, применяемый к заполнителю, отображаемому во время перетаскивания.
chosenClassstring—CSS-класс, который висит на элементе с момента выбора и до конца перетаскивания. По умолчанию `sortable-chosen`.
dragClassstring—CSS-класс элемента, который следует за указателем во время перетаскивания. По умолчанию `sortable-drag`.
fallbackOnBodyboolean—Помещает превью перетаскивания в `document.body`, а не в список, чтобы предок с `overflow: hidden` его не обрезал.
fallbackTolerancenumber—Сколько пикселей должен пройти указатель, прежде чем начнётся запасное перетаскивание. По умолчанию `0`; увеличьте, чтобы касание не считалось перетаскиванием.
fallbackClassstring—CSS-класс клона-превью, который используется, когда нативный HTML5 drag-and-drop обходится.
fallbackOffset{ x: number; y: number }—Смещение запасного превью перетаскивания в пикселях относительно указателя.
forceFallbackboolean—Не использует нативный HTML5 drag-and-drop и всегда тащит клон — он выглядит одинаково во всех браузерах.
filterstring | ((event, target, sortable) => boolean)—CSS-селектор (или предикат), отмечающий элементы, которые нельзя перетаскивать.
preventOnFilterboolean—Вызывает `preventDefault()` для события, которое сработало на `filter`. По умолчанию `true`; отключите, если отфильтрованный элемент — это контрол, которому нужен собственный клик.
direction'vertical' | 'horizontal' | ((event, target, dragEl) => 'vertical' | 'horizontal')—Ось, вдоль которой выложен список. Определяется автоматически, если не задана; для сеток и списков с переносом задавайте явно — автоопределение там ошибается.
swapThresholdnumber—Доля целевого элемента (от 0 до 1), которую должен покрыть указатель до обмена местами. По умолчанию `1`; меньшие значения меняют раньше.
invertSwapboolean—Всегда использует инвертированную зону обмена: обмен происходит, когда указатель покидает элемент, а не когда входит в него.
invertedSwapThresholdnumber—Порог, действующий при инвертированной зоне обмена. Если не задан, берётся `swapThreshold`.
removeCloneOnHideboolean—Убирает клон из DOM, пока он скрыт, вместо того чтобы просто прятать его. По умолчанию `true`.
ignorestring—CSS-селектор элементов внутри пункта, которые никогда не должны начинать перетаскивание, — полей ввода, ссылок.
touchStartThresholdnumber—Сколько пикселей может пройти палец до отмены отложенного перетаскивания — граница между перетаскиванием и прокруткой.
emptyInsertThresholdnumber—Расстояние в пикселях до пустого списка, на котором перетаскиваемый элемент в него вставляется. По умолчанию `5`; при `0` указатель должен быть внутри списка.
dropBubbleboolean—Позволяет событию drop всплывать дальше к элементам-предкам.
dragoverBubbleboolean—Позволяет событию dragover всплывать дальше к элементам-предкам.
dataIdAttrstring—HTML-атрибут, который `Sortable.toArray()` и `store` читают как идентификатор каждого элемента. По умолчанию `data-id`.
delayOnTouchOnlyboolean—Применяет `delay` только к сенсорному вводу — мышью перетаскивание по-прежнему начинается сразу.
easingstring—CSS-функция плавности для анимации переупорядочивания, например `cubic-bezier(1, 0, 0, 1)`.
setData(dataTransfer: DataTransfer, draggedElement: HTMLElement) => void—Вызывается в начале перетаскивания, чтобы записать данные в нативный `DataTransfer` — точка подключения для перетаскивания за пределы страницы.
store{ get: (sortable: Sortable) => string[]; set: (sortable: Sortable) => void }—Пара колбэков `get`/`set` для сохранения порядка и восстановления его при следующей загрузке; ключом служит `dataIdAttr`.

События

Реагируйте на то, что делает sortable, — 13 событий, к которым можно подключить вашу логику.

ИмяТипОписание
initSortableВозникает после создания базового экземпляра SortableJS.
startSortableEventВозникает в начале операции перетаскивания.
endSortableEventВозникает в конце операции перетаскивания, независимо от результата.
addSortableEventВозникает, когда элемент перемещается в этот список из другого.
updateSortableEventВозникает, когда элемент меняет позицию внутри того же списка.
sortEventSortableEventВозникает при любом изменении порядка списка (после `add` или `update`).
removeSortableEventВозникает, когда элемент покидает этот список в направлении другого.
filterEventSortableEventВозникает при попытке перетащить отфильтрованный (неперетаскиваемый) элемент.
changeSortableEventВозникает, когда список изменяется из-за добавления или удаления.
chooseSortableEventВозникает при выборе элемента (нажатие указателя).
unchooseSortableEventВозникает, когда элемент отпускают без перетаскивания.
cloneSortableEventВозникает при клонировании элемента в режиме клонирования.
moveSortableMoveEventPayloadВозникает непрерывно во время перетаскивания; возвращаемое значение может определять, разрешено ли перемещение.

Шаблоны

Шаблоны пока не задокументированы.