Saltar al contenido principal
Neural UIv2.0.0Documentación
Ver v1 GitHub

TreeSelect

Selecciona nodos de una jerarquía con expansión controlada y selección simple o múltiple.

Categoría
Formularios y selección
Import
@neural-ui/core/tree-select
Selector
neu-tree-select
import { NeuTreeSelectComponent } from '@neural-ui/core/tree-select';

Uso

TreeSelect muestra la jerarquía dentro de su panel. El modo simple guarda el valor de un nodo; el modo múltiple guarda un array. La selección independent afecta al nodo elegido; propagated sigue las relaciones entre padres e hijos.

La expansión es controlada: enlaza expandedKeys y aplica expandedKeysChange. Para nodos lazy, childrenRequest solicita los hijos a la aplicación; no los descarga por sí mismo.

Signal Forms

Enlaza FormField al control que gestiona el valor y añade required al esquema del formulario. Selecciona un destino, sal del campo para marcarlo como visitado y restablécelo para comprobar el valor y la validación. La marca de obligatorio no valida por sí sola el formulario.

Guía de Signal Forms

Signal Forms

Valor: — · Válido: false

Prueba y configura

Cambia las opciones e interactúa con el control. La vista previa, el valor de la aplicación y el template generado permanecen juntos. Un destino deshabilitado permite comprobar que no se pueden seleccionar opciones no disponibles.

Prueba y configura
Vista previa

Eventos: 0 ·

Template generado: refleja las opciones anteriores. Los imports y el estado están en la pestaña Código.

template.html
<neu-tree-select
  (opened)="record('opened', $event)"
  (closed)="record('closed', $event)"
  (nodeExpanded)="record('nodeExpanded', $event)"
  (nodeCollapsed)="record('nodeCollapsed', $event)"
  (childrenRequest)="loadChildren($event)"
  (rangeChange)="record('rangeChange', $event)"
  (filter)="record('filter', $event)"
  (cleared)="record('cleared', $event)"
  (touch)="record('touch', $event)"
  (valueChange)="record('valueChange', $event)"
  [nodes]="destinations"
  [(value)]="destination"
  [expandedKeys]="expandedKeys()"
  (expandedKeysChange)="expandedKeys.set($event)"
  [clearable]="true"
  [clearLabel]="'Limpiar selección'"
  [emptyLabel]="'No hay destinos'"
  [label]="'Destino'"
  [placeholder]="'Elige un destino'"
  [searchPlaceholder]="'Buscar destinos'"
/>

Valor y eventos

Usa una sola fuente de verdad: [(value)]="destination" o [value]="destination()" junto con (valueChange)="destination.set($event)". No combines las dos formas de enlace.

Los Inputs configuran el control. valueChange sincroniza su modelo; los demás Outputs comunican las acciones o fases documentadas. Las solicitudes de sugerencias, hijos o ventanas remotas requieren que la aplicación proporcione los datos.

Accesibilidad y teclado

Utiliza una etiqueta visible o un nombre accesible. Prueba la navegación por teclado, las opciones deshabilitadas, la selección y el cierre del panel. Los templates de opción deben conservar texto descriptivo y no introducir botones ni otro checkbox enfocable dentro de la opción.

Tecla
Acción
Tab Mueve el foco hacia dentro o fuera del control.
ArrowDown / ArrowUp Mueve la opción activa entre las opciones disponibles.
Enter Activa la opción enfocada.
Escape Cierra el panel sin seleccionar otra opción.

API

La referencia muestra los Inputs, modelos, Outputs y Templates públicos del paquete de Core fijado. Pulsa un tipo con nombre para abrir su definición. Cada Template aplicable tiene un ejemplo ejecutable y su código real.

Inputs

Configura el componente con [propiedad]="valor". Tu aplicación proporciona estos valores; el componente no debe reemplazar el estado que le pasas.

Nombre
Tipo
Por defecto
Uso en el template
Descripción
clearablebooleanfalse[clearable]Muestra la acción de limpiar cuando hay un valor seleccionado.
clearLabelstring'Clear selection'[clearLabel]Etiqueta de la acción que limpia la selección.
disabledbooleanfalse[disabled]Deshabilita la interacción del usuario; las opciones deshabilitadas no se pueden seleccionar.
emptyLabelstring'No options found'[emptyLabel]Mensaje que se muestra cuando no hay opciones disponibles.
expandedKeysreadonly V[][][expandedKeys]Claves de nodos expandidos aplicadas. Actualiza este input para aceptar expandedKeysChange.
labelstring''[label]Etiqueta visible del campo o de la opción.
modeM'single' as MValor derivado[mode]Modo de selección. El tipo del valor depende del modo elegido.
nodesreadonly T[][][nodes]Nodos raíz. Las relaciones de hijos se leen mediante optionChildren.
optionChildrenNeuOptionAccessor<T, readonly T[]> | nullnull[optionChildren]Nombre de campo o función que lee los hijos de un nodo.
optionDisabledNeuOptionDisabledAccessor<T> | nullnull[optionDisabled]Nombre de campo o función que indica si una opción está deshabilitada.
optionLabelNeuOptionLabelAccessor<T> | nullnull[optionLabel]Nombre de campo o función que obtiene la etiqueta visible de la opción.
optionValueNeuOptionValueAccessor<T, V> | nullnull[optionValue]Nombre de campo o función que obtiene el valor guardado de la opción.
placeholderstring'Select...'[placeholder]Texto que se muestra cuando el campo no tiene un valor seleccionado.
readonlybooleanfalse[readonly]Mantiene el valor visible sin permitir que el usuario lo cambie.
searchablebooleantrue[searchable]Muestra el campo de búsqueda de opciones integrado.
searchPlaceholderstring'Search...'[searchPlaceholder]Placeholder del campo de búsqueda de opciones.
selectionStrategyNeuTreeSelectSelectionStrategy'independent'[selectionStrategy]Selección independiente de nodos o propagada entre padres e hijos.
touchedbooleanfalse[touched]Estado del formulario que indica que el control ha sido visitado.
virtualizationOptionsReadonly<NeuTreeSelectVirtualizationOptions>{}[virtualizationOptions]Opciones del área visible del árbol: enabled, itemSize, viewportHeight y buffer.

Models

Un modelo admite [(propiedad)]="signal" o la pareja [propiedad] y (propiedadChange). Elige una de las dos formas, no ambas.

Nombre
Tipo
Por defecto
Uso en el template
Descripción
valueNeuSelectionValue<V, M>null as NeuSelectionValue<V, M>Valor derivado[(value)]Modo simple: un valor o null. Modo múltiple: un array. La aplicación es propietaria del modelo enlazado.

Outputs

Escucha un evento con (evento)="handler($event)". La tabla indica qué datos recibe tu función y cómo utilizarlos.

Nombre
Valor emitido
Uso en el template
Descripción
childrenRequestNeuTreeSelectChildrenRequest<V>(childrenRequest)="onChildrenRequest($event)"Solicita los hijos de un nodo lazy; actualiza sus datos cargados cuando estén disponibles.
clearedvoid(cleared)="onCleared($event)"Se emite con la acción explícita de limpiar; valueChange comunica el valor resultante.
closedvoid(closed)="onClosed($event)"Se emite después de cerrar el panel en el navegador.
expandedKeysChangereadonly V[](expandedKeysChange)="onExpandedKeysChange($event)"Claves de expansión propuestas. Actualiza expandedKeys para aplicar el cambio.
filter{ query: string; }(filter)="onFilter($event)"Consulta de búsqueda original modificada por el usuario.
nodeCollapsedT(nodeCollapsed)="onNodeCollapsed($event)"Nodo contraído por una acción del usuario.
nodeExpandedT(nodeExpanded)="onNodeExpanded($event)"Nodo expandido por una acción del usuario.
openedvoid(opened)="onOpened($event)"Se emite después de abrir el panel en el navegador.
rangeChangeNeuViewportRange(rangeChange)="onRangeChange($event)"Rango visible actual del área virtual.
touchvoid(touch)="onTouch($event)"Notifica al formulario que el control ha sido visitado; no es un cambio de valor.

Templates

ng-content proyecta contenido dentro del componente. Los inputs TemplateRef reciben un template; las directivas ng-template identifican templates con un contexto tipado. Una directiva compartida en el entrypoint no es necesariamente un slot de este componente.

Nombre
Mecanismo
Contrato
NeuTreeSelectEmptyDirectiveVer ejemplo Directiva pública de templateng-template[neuTreeSelectEmpty]
NeuTreeSelectFooterDirectiveVer ejemplo Directiva pública de templateng-template[neuTreeSelectFooter]
NeuTreeSelectHeaderDirectiveVer ejemplo Directiva pública de templateng-template[neuTreeSelectHeader]
NeuTreeSelectNodeDirectiveVer ejemplo Directiva pública de templateng-template[neuTreeSelectNode]
NeuTreeSelectSelectedDirectiveVer ejemplo Directiva pública de templateng-template[neuTreeSelectSelected]

Cada ejemplo muestra un template diferente. Alterna entre Demo y Código para consultar su implementación, imports y estado.

Template Empty

NeuTreeSelectEmptyDirective

Template Empty

Abre el control para ver el estado vacío.

Template Header

NeuTreeSelectHeaderDirective

Template Header

Abre el control para ver el template personalizado.

Template Node

NeuTreeSelectNodeDirective

Template Node

Abre el control para ver el template personalizado.

Template Selected

NeuTreeSelectSelectedDirective

Template Selected

Abre el control para ver el template personalizado.

Public Types

Abre un tipo para consultar su definición y los campos de sus interfaces.

Estilos y tokens

Carga los estilos de Core una sola vez. Utiliza los tokens públicos para personalizaciones locales o un preset para cambios de toda la aplicación. Conserva la legibilidad de etiquetas, foco, opciones seleccionadas y estados deshabilitados en modo claro y oscuro.

Tokens específicos

Este componente utiliza tokens compartidos del tema en lugar de tokens específicos.

Tokens compartidos utilizados

Sobrescríbelos en un contenedor local para afectar a este ejemplo. Una modificación en :root afecta a los demás componentes que utilizan el mismo token.

Token
Efecto aquí
Otros efectos
Valor / alternativa
--neu-border Bordes normales de controles y celdas Compartido con otros consumidores de Core; limita el cambio a un ámbito. rgba(15, 23, 42, 0.08)
--neu-focus-ring Anillo normal del foco de teclado Compartido con otros consumidores de Core; limita el cambio a un ámbito. 0 0 0 var(--neu-focus-ring-width) rgba(0, 122, 255, 0.15)
--neu-primary Color de marca en controles activos y énfasis Compartido con otros consumidores de Core; limita el cambio a un ámbito. #007aff
--neu-radius Radio de las esquinas del control Compartido con otros consumidores de Core; limita el cambio a un ámbito. 8px
--neu-surface Superficie principal del campo, cabecera o control Compartido con otros consumidores de Core; limita el cambio a un ámbito. #ffffff
--neu-text Color del texto principal y de los iconos que lo heredan Compartido con otros consumidores de Core; limita el cambio a un ámbito. #0f172a
--neu-text-muted Etiquetas secundarias y contenido de ayuda Compartido con otros consumidores de Core; limita el cambio a un ámbito. #475569
--neu-shadow-lg Elevación de la superficie o capa Compartido con otros consumidores de Core; limita el cambio a un ámbito. 0 10px 30px rgba(15, 23, 42, 0.1), 0 4px 8px rgba(15, 23, 42, 0.04)