Tag Input позволяет вводить несколько значений в виде тегов и поддерживает навигацию с клавиатуры, выбор и удаление.

Tag 0
Tag 1
Tag 2

Порядок удаления тегов:

  • Если есть выделенные теги, будут удалены они все.
  • Если выделенных тегов нет, будет удалён тег в фокусе.

Теги можно удалить несколькими способами:

  • Клик по иконке удаления (директива kbqTagRemove) внутри тега.
  • Нажатие клавиши Delete или Backspace.
  • Клик по кнопке сброса — она удаляет все теги, кроме неактивных.
  • Программное удаление через API компонента.

Опция удаления настраивается при помощи атрибута removable (по умолчанию включена). У неактивного тега иконка удаления не показывается, а у списка с removable="false" нет и кнопки сброса.

Removable tag 0
Removable tag 1
Removable tag 2

Кнопке сброса собственный обработчик не нужен: она удаляет теги через то же событие removed, что и иконка удаления внутри тега. Какие теги она удаляет, задаёт параметр clearPredicate: с [clearPredicate]="clearEverything" и clearEverything = () => true очищаются и неактивные.

Alpha
Beta
Gamma
Alpha
Beta
Gamma

Теги можно выбрать несколькими способами:

  • Клик по тегу при зажатом Ctrl.
  • Клик по тегу при зажатом Shift, чтобы изменить выбор диапазона от якорного тега до нажатого.
  • Нажатие Shift + ← / →, чтобы расширить или сузить диапазон.
  • Нажатие комбинации клавиш Ctrl+A.
  • Space при фокусе на теге.
  • Программный выбор через API компонента.

Мышь и клавиатура изменяют один диапазон относительно его начального тега. При сужении диапазона выбор лишних тегов снимается. Недоступные теги не изменяются.

Опция выбора настраивается при помощи атрибута selectable (по умолчанию включена).

Для включения режима редактирования необходимо установить свойство editable для kbq-tag-list или отдельного kbq-tag.

Вход в режим:

  • При двойном клике по тегу.
  • При нажатии клавиши Enter или F2 (при фокусе на теге).

Сохранение изменений:

  • При нажатии клавиши Enter.
  • При нажатии на кнопку подтверждения (директива kbqTagEditSubmit).

Отмена изменений:

  • При нажатии клавиши Escape.
  • При потере фокуса.

В режиме редактирования тег превращается в поле ввода и остается на той же позиции внутри контрола.

Editable tag 0
Editable tag 1
Editable tag 2

Для включения возможности перестановки тегов необходимо установить свойство draggable для kbq-tag-list.

Draggable tag 0
Draggable tag 1
Draggable tag 2

По умолчанию тег создаётся по Enter. Дополнительные клавиши-разделители задаются через kbqTagInputSeparatorKeyCodes и работают как при наборе текста, так и при вставке из буфера обмена.

Если разделитель нужен только при вставке (например, пробел — обычный символ внутри тега), укажите для него appliesTo: ['paste']. Разделители без key (например, /\s+/ для любой последовательности пробельных символов) вставочные по умолчанию, так как им не может соответствовать нажатие клавиши.

Настройки по умолчанию для приложения или модуля задаются через kbqTagsDefaultOptionsProvider:

import { ENTER } from '@koobiq/components/core';
import { kbqTagsDefaultOptionsProvider } from '@koobiq/components/tags';
@NgModule({
providers: [
kbqTagsDefaultOptionsProvider({
separatorKeyCodes: [ENTER],
separators: [
{ symbol: /\r?\n/, key: 'Enter', keyCode: ENTER, appliesTo: ['input', 'paste'] },
{ symbol: /\s+/, appliesTo: ['paste'] } // только при вставке — разделяет по любым пробельным символам
]
})
]
})

Валидаторы вешаются на <kbq-tag-list>: контрол формы для всего списка — это именно kbq-tag-list, а поле ввода служит только для набора текста. Значение контрола — массив тегов, так что одним набором валидаторов проверяются и количество тегов, и содержимое каждого из них.

Собственный [formControl] или [ngModel] на <input kbqTagInputFor> при этом не запрещён: он нужен, например, когда набранный текст участвует в фильтрации автодополнения. Библиотека просто не учитывает валидаторы, навешанные на этот контрол — не проверяет их и в состояние ошибки поле не переводит.

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

Момент показа ошибки задаётся через ErrorStateMatcher и по умолчанию наступает, когда контрол невалиден и при этом получил touched либо форма была отправлена.

Koobiq
Angular
Design
Only latin letters, up to 5 tags
Клавиша
Действие
Backspace / ← / Shift + TabПереместить фокус на последний тег.
Ctrl + AВыделить все теги и поставить фокус на последний из них.
Клавиша
Действие
← / →Переместить фокус на предыдущий/следующий тег.
Shift + ← / →Изменить диапазон и переместить фокус.
SpaceВыбрать/снять выбор тега.
Delete / BackspaceУдалить тег.
F2 / EnterНачать редактирование.
Ctrl + AВыделить все теги.
Home / EndПереместить фокус на первый/последний тег.
Клавиша
Действие
EnterСохранить изменения.
EscОтменить изменения.
Предложения по улучшению
Если вы нашли ошибку или хотите доработать статью, создайте запрос на GitHub.