# Árbol

Visualización y selección en árbol. Admite casillas de verificación (por defecto con acoplamiento padre-hijo + estado indeterminado, que checkStrictly desactiva), selección múltiple y carga diferida (al expandir un nodo no cargado se invoca load); las tres claves controladas funcionan con .sync.

Árbol
<template>
  <div class="demo-col" style="max-width: 320px">
    <p class="demo-note">Casillas + checkStrictly (padre e hijo desacoplados) + claves de expansión/selección/marcado iniciales</p>
    <LhTree
      :data="data"
      show-checkbox
      check-strictly
      :default-expanded-keys="['song']"
      :default-selected-keys="['xishan']"
      :default-checked-keys="['libai']"
      :expand-on-click-node="false"
      @select="onSelect"
      @check="onCheck"
    />
    <p class="demo-note">Selección al pulsar: {{ selected }}; Claves marcadas: {{ checked.join(', ') || '(ninguna)' }}</p>
    <p class="demo-note">multiple: selección múltiple + disabled desactiva todo el árbol</p>
    <LhTree :data="data" multiple disabled :default-expanded-keys="['tang']" @select="onSelectMulti" />
    <p class="demo-note">Resultado de la selección múltiple: {{ multi.join(', ') || '(ninguna)' }}</p>
    <p class="demo-note">Claves controladas: expandedKeys / selectedKeys / checkedKeys</p>
    <LhTree
      :data="data"
      show-checkbox
      :expanded-keys="['song']"
      :selected-keys="['guo']"
      :checked-keys="['xishan']"
      @select="onSelect"
    />
    <p class="demo-note">lazy: carga diferida (al pulsar para expandir se invoca load para obtener los nodos hijos)</p>
    <LhTree :data="lazyData" lazy :load="onLoad" :default-expanded-keys="['root']" />
  </div>
</template>

<script>
export default {
  data: () => ({
    selected: '(ninguna)',
    checked: [],
    multi: [],
    data: [
      {
        key: 'tang',
        label: 'Dinastía Tang',
        children: [
          { key: 'wangwei', label: 'Wang Wei' },
          { key: 'libai', label: 'Li Bai' },
        ],
      },
      {
        key: 'song',
        label: 'Dinastía Song',
        children: [
          {
            key: 'fan',
            label: 'Fan Kuan',
            children: [{ key: 'xishan', label: 'Viaje por las montañas y los arroyos' }],
          },
          { key: 'guo', label: 'Guo Xi' },
        ],
      },
    ],
    lazyData: [{ key: 'root', label: 'Géneros pictóricos (pulsa para expandir con carga diferida)' }],
  }),
  methods: {
    onSelect(key) {
      this.selected = String(key)
    },
    onCheck(keys) {
      this.checked = Array.isArray(keys) ? keys : []
    },
    onSelectMulti(keys) {
      this.multi = Array.isArray(keys) ? keys : [String(keys)]
    },
    onLoad(node, resolve) {
      setTimeout(() => {
        var _a, _b
        resolve([
          { key: `${String((_a = node.key) !== null && _a !== void 0 ? _a : '')}-a`, label: 'Paisaje' },
          { key: `${String((_b = node.key) !== null && _b !== void 0 ? _b : '')}-b`, label: 'Flores y pájaros' },
        ])
      }, 400)
    },
  },
}
</script>

# Props

Prop Descripción Tipo Predeterminado
data Datos del árbol LhTreeNode[] []
showCheckbox Muestra casillas de verificación boolean false
multiple Selección múltiple (la pulsación sobre un nodo alterna la selección en lugar de reemplazarla) boolean false
expandOnClickNode Al pulsar un nodo que no es hoja se expande / contrae boolean false
defaultExpandedKeys / expandedKeys Claves de expansión inicial / controlada string[] —
defaultSelectedKeys / selectedKeys Claves de selección inicial / controlada string[] —
defaultCheckedKeys / checkedKeys Claves de marcado inicial / controlado string[] —
checkStrictly Desacopla el marcado de padre e hijo (sin acoplamiento ni estado indeterminado) boolean false
lazy Carga diferida: al expandir un nodo no hoja aún no cargado se invoca load boolean false
load Callback de carga diferida; resolve(children) confirma y expande, y reject() cancela (node, resolve, reject) => void —
disabled Desactiva todo el árbol boolean false
sx Prop abreviada de maquetación — —

# Events

update:expandedKeys、update:selectedKeys、update:checkedKeys(均 .sync)、 expand (key, isExpanded)、select (key, node)、check (keys, node)、nodeLoad (node, children)

# Slots

Slot Descripción
node Etiqueta del nodo; parámetros de alcance { node, level, expanded, selected }
empty Contenido cuando no hay datos (predeterminado: «暂无数据»)

# Accesibilidad

Los nodos usan role="treeitem" + aria-expanded (nodos expandibles) + aria-selected / aria-checked; el contenedor usa role="tree", y se admite el desplazamiento con las flechas arriba/abajo, la expansión y la contracción con izquierda/derecha, el marcado con la barra espaciadora y la selección con Enter.

Copyright © 2024-2026 FengMo WenXue