Así es como se ve mi etiqueta de entrada:
<input type="file" placeholder="File Name" name="filename" (change)="onChange($event)">
<button>Reset</button>
Quiero restablecer el archivo seleccionado en Angular 2. Se agradecería mucho la ayuda. Déjeme saber si usted necesita más detalles.
PD
Podría obtener detalles del archivo de los $event
parámetros y guardarlo en una variable mecanografiada, pero esta variable no está vinculada a la etiqueta de entrada.
Respuestas:
Puede utilizar
ViewChild
para acceder a la entrada en su componente. Primero, debe agregar#someValue
a su entrada para que pueda leerla en el componente:<input #myInput type="file" placeholder="File Name" name="filename" (change)="onChange($event)">
Luego, en su componente, debe importar
ViewChild
desde@angular/core
:import { ViewChild } from '@angular/core';
Luego usa
ViewChild
para acceder a la entrada de la plantilla:@ViewChild('myInput') myInputVariable: ElementRef;
Ahora puede usar
myInputVariable
para restablecer el archivo seleccionado porque es una referencia para ingresar#myInput
, por ejemplo, crear un métodoreset()
que se llamará en elclick
evento de su botón:reset() { console.log(this.myInputVariable.nativeElement.files); this.myInputVariable.nativeElement.value = ""; console.log(this.myInputVariable.nativeElement.files); }
Primero
console.log
imprimirá el archivo que seleccionó, segundoconsole.log
imprimirá una matriz vacía porquethis.myInputVariable.nativeElement.value = "";
elimina los archivos seleccionados de la entrada. Tenemos que usarthis.myInputVariable.nativeElement.value = "";
para restablecer el valor de la entrada porque elFileList
atributo de la entrada es de solo lectura , por lo que es imposible eliminar el elemento de la matriz. Aquí está trabajando Plunker .fuente
this.myInputVariable.nativeElement.value = "";
? /myInputVariable
es de hecho de tipoElementRef
Angular 5
html
modelo
No se requiere botón. Puede restablecerlo después del evento de cambio, es solo para demostración
fuente
Una forma de lograrlo es envolver su entrada en una
<form>
etiqueta y restablecerla.No estoy considerando adjuntar el formulario thr a
NgForm
niFormControl
tampoco.https://plnkr.co/edit/Ulqh2l093LV6GlQWKkUA?p=preview
fuente
.reset()
método en viewChild?Por lo general, restablezco la entrada de mi archivo después de capturar los archivos seleccionados. No es necesario presionar un botón, tiene todo lo necesario en el
$event
objeto al que está pasandoonChange
:Flujo de trabajo diferente, pero el OP no menciona que presionar un botón es un requisito ...
fuente
Plunker versión corta :
Y creo que el caso más común es no usar el botón, pero se reinicia automáticamente. Las declaraciones de plantilla angular admiten el encadenamiento de expresiones, por lo que Plunker :
Y un enlace interesante sobre por qué no hay recursividad en el cambio de valor.
fuente
Creo que es simple, usa #variable
La opción "variable.value = null" también está disponible
fuente
En mi caso lo hice de la siguiente manera:
Lo estoy restableciendo usando #fileInput en HTML en lugar de crear un ViewChild en component.ts. Siempre que se hace clic en el botón "Cargar archivo", primero restablece #fileInput y luego activa la
#fileInput.click()
función. Si es necesario restablecer cualquier botón separado,#fileInput.value=''
se puede ejecutar al hacer clic .fuente
modelo:
componente:
fuente
Si tiene problemas con ng2-file-upload,
HTML:
componente
fuente
He agregado esta etiqueta de entrada en la etiqueta del formulario.
I mecanografiado angular, he agregado las siguientes líneas, obtengo su ID de formulario en formularios de documento y hago que ese valor sea nulo.
Imprima document.forms en la consola y podrá hacerse una idea.
fuente
puede usar la variable de referencia de la plantilla y enviarla a un método
html
componente
fuente
Estoy usando un enfoque muy simple. Después de que se haya cargado un archivo, en breve elimino el control de entrada, usando * ngIf. Eso hará que el campo de entrada se elimine del dom y se vuelva a agregar, en consecuencia, es un nuevo control y, por lo tanto, está vacío:
showUploader: boolean = true; async upload($event) { await dosomethingwiththefile(); this.showUploader = false; setTimeout(() =>{ this.showUploader = true }, 100); }
<input type="file" (change)="upload($event)" *ngIf="showUploader">
fuente
<input type="file" id="image_control" (change)="validateFile($event)" accept="image/gif, image/jpeg, image/png" />
fuente