Uploader
Selecciona y valida archivos locales con vistas previas y estado de subida gestionado por la aplicación.
import { NeuUploaderComponent } from '@neural-ui/core/uploader';Uso
Ejemplos
Elegir archivos
Arrastra archivos aquí o elígelos · Tipos permitidos: .txt,.pdf · Tamaño máximo: 1.0 MB
0 archivos seleccionados
Eventos: 0
Prueba y configura
Elegir archivos
Arrastra archivos aquí o elígelos · Tipos permitidos: .txt,.pdf · Tamaño máximo: 1.0 MB
Usa Fallar junto al archivo para simular un fallo y después Reintentar. No se sube ningún archivo.
0 archivos seleccionados
Eventos: 0
<neu-uploader
[value]="value()"
(valueChange)="onValueChange($event)"
[disabled]="false"
[readonly]="false"
[invalid]="false"
[multiple]="true"
[dropzone]="true"
[showProgress]="true"
[size]="'md'"
[maxFiles]="3"
[maxFileSize]="1048576"
[accept]="'.txt,.pdf'"
[progress]="progress()"
[fileStates]="fileStates()"
[previewTemplate]="failurePreview"
(filesRejected)="record('filesRejected', $event)"
(filesSelected)="record('filesSelected', $event.map(fileName))"
(fileRetry)="retry($event)"
[acceptedTypesLabel]="'Tipos permitidos'"
[chooseLabel]="'Elegir archivos'"
[clearLabel]="'Limpiar'"
[dropzoneLabel]="'Arrastra archivos para añadirlos'"
[duplicateFileMessage]="'Archivo ya seleccionado.'"
[emptySelectionMessage]="'Ningún archivo seleccionado.'"
[fileCountPluralLabel]="'archivos'"
[fileCountSingularLabel]="'archivo'"
[invalidTypeMessage]="'El tipo de archivo no está permitido.'"
[label]="'Adjuntos'"
[listAriaLabel]="'Archivos seleccionados'"
[maxFileSizeMessage]="'El archivo supera el tamaño máximo.'"
[maxFileSizeTextLabel]="'Tamaño máximo'"
[maxFilesMessage]="'Demasiados archivos seleccionados.'"
[placeholder]="'Arrastra archivos aquí o elígelos'"
[progressLabel]="'Progreso de subida'"
[removeAriaLabel]="'Eliminar archivo'"
[retryAriaLabel]="'Reintentar subida de'"
[retryLabel]="'Reintentar'"
/>
<div class="remaining-actions">
<button
neu-button
variant="outline"
[disabled]="disabled() || readonly()"
(neuClick)="sample()"
>
{{ t("Add sample file", "Añadir archivo de ejemplo") }}</button
><button neu-button variant="ghost" [disabled]="disabled() || readonly() || !value().length" (neuClick)="simulate()">
{{ t("Toggle sample progress", "Alternar progreso de ejemplo") }}
</button>
</div>
<ng-template #failurePreview let-item>
<button neu-button variant="outline" tone="danger" size="sm"
[ariaLabel]="t('Simulate upload failure for', 'Simular fallo de subida de') + ' ' + item.name"
[disabled]="disabled() || readonly() || item.status === 'error'"
(neuClick)="simulateFailure(item)"
>{{ t('Fail', 'Fallar') }}</button>
</ng-template>
Estado y eventos
Accesibilidad y teclado
API
Inputs
Configura el componente con [propiedad]="valor". Tu aplicación proporciona estos valores; el componente no debe reemplazar el estado que le pasas.
Models
Un modelo admite [(propiedad)]="signal" o la pareja [propiedad] y (propiedadChange). Elige una de las dos formas, no ambas.
Outputs
Escucha un evento con (evento)="handler($event)". La tabla indica qué datos recibe tu función y cómo utilizarlos.
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.
Cada ejemplo muestra un template diferente. Alterna entre Demo y Código para consultar su implementación, imports y estado.
previewTemplate
previewTemplate
Elegir archivos
Arrastra archivos aquí o elígelos · Tipos permitidos: .txt,.pdf · Tamaño máximo: 1.0 MB
0 archivos seleccionados
Eventos: 0
Public Types
Abre un tipo para consultar su definición y los campos de sus interfaces.
Estilos y tokens
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.