Skip to content

Выбор и режимы вывода ​

О чём эта страница ​

Логика выбора живёт в assembly/tree-check.ts и по selectType разветвляется на три довольно разные семантики:

SelectTypeПоведение
CHECKBOXУстанавливает целевой узел и всё его поддерево, затем один раз проходит по каждому предку, пересчитывая checked (CHECKED / HALF_CHECKED / UNCHECKED) по его прямым потомкам
RADIOВо всём дереве выбран ровно один узел
SELECTВыбор по клику; тоже единственный во всём дереве, но использует поле selected и не трогает состояние чекбоксов

Два поведения, которые легко упустить:

  • Отключённые узлы выбрать нельзя: если целевой узел disabled, операция сразу возвращается — не меняется даже его поддерево.
  • Пересчёт предков идемпотентен: каждый предок пересчитывается по текущим значениям потомков, а не накоплением приращений, поэтому повторный выбор того же узла не «уплывает» в полувыбор.

Параметры ​

propТипПо умолчаниюОписание
selectTypeSelectTypeSelectType.CHECKBOXCHECKBOX / RADIO / SELECT
outputIdOnlybooleantruetrue — в v-model только ID выбранных узлов; false — полные TreeNodeData
checkedOutputModeCheckedOutputModeCheckedOutputMode.AllВ режиме CHECKBOX — какие выбранные узлы попадают в вывод
filterFnFilterFn—Пользовательский фильтр, см. таблицу ниже
modelValueTreeNodeData | TreeNodeData[] | string | string[]—Результат выбора (v-model)

CheckedOutputMode ​

ЗначениеВывод
AllВсе выбранные узлы
RootOnlyТолько корни полностью выбранных поддеревьев (без дублей, самый верхний уровень)
LeafOnlyТолько листовые узлы
CustomОпределяет filterFn

Что делает filterFn в каждом режиме ​

РежимДействие
CHECKBOX + CustomФильтрует вывод: выбранный узел, для которого filterFn вернул false, не попадает в v-model
RADIOФильтрует возможность выбора: у узла с false радиокнопка не показывается
SELECTНе затрагивается

filterFn получает extendData узла (полную копию исходной строки), а не TreeNodeData.

Использование ​

Только ID выбранных узлов (по умолчанию):

vue
<VueGiantTree :tree="rows" root="root" v-model="selectedIds" />
<!-- selectedIds: ['2', '3'] -->

Полное содержимое узлов:

vue
<VueGiantTree :tree="rows" root="root" :output-id-only="false" v-model="selectedRows" />
<!-- selectedRows: [{ id: '2', name: 'Дочерний A', ... }] -->

Только корни полностью выбранных поддеревьев:

vue
<VueGiantTree
  :tree="rows"
  root="root"
  :checked-output-mode="CheckedOutputMode.RootOnly"
  v-model="selectedIds"
/>

Попробуйте ​

Попробуйте: выберите корневой узел, затем переключите «Режим вывода» — панель перейдёт от «все выбранные узлы» к «только корень» или «только листья». Переключитесь на RADIO — на тех же данных появятся радиокнопки, выбранной будет не более одной.