Voici à quoi ressemble ma balise d'entrée:
<input type="file" placeholder="File Name" name="filename" (change)="onChange($event)">
<button>Reset</button>
Je veux réinitialiser le fichier sélectionné dans Angular 2. Une aide serait grandement appréciée. Faites-moi savoir si vous avez besoin de plus de détails.
PS
Je pourrais obtenir les détails du fichier à partir des $event
paramètres et les enregistrer dans une variable dactylographiée, mais cette variable n'est pas liée à la balise d'entrée.
Réponses:
Vous pouvez utiliser
ViewChild
pour accéder à l'entrée de votre composant. Tout d'abord, vous devez ajouter#someValue
à votre entrée pour pouvoir la lire dans le composant:<input #myInput type="file" placeholder="File Name" name="filename" (change)="onChange($event)">
Ensuite, dans votre composant, vous devez importer à
ViewChild
partir de@angular/core
:import { ViewChild } from '@angular/core';
Ensuite, vous utilisez
ViewChild
pour accéder à l'entrée du modèle:@ViewChild('myInput') myInputVariable: ElementRef;
Vous pouvez maintenant utiliser
myInputVariable
pour réinitialiser le fichier sélectionné car il s'agit d'une référence à saisir avec#myInput
, par exemple, une méthode de créationreset()
qui sera appelée à l'click
événement de votre bouton:reset() { console.log(this.myInputVariable.nativeElement.files); this.myInputVariable.nativeElement.value = ""; console.log(this.myInputVariable.nativeElement.files); }
Le premier
console.log
imprimera le fichier que vous avez sélectionné, le secondconsole.log
imprimera un tableau vide carthis.myInputVariable.nativeElement.value = "";
supprime le ou les fichiers sélectionnés de l'entrée. Nous devons utiliserthis.myInputVariable.nativeElement.value = "";
pour réinitialiser la valeur de l'entrée car l'FileList
attribut d'entrée est en lecture seule , il est donc impossible de simplement supprimer l'élément du tableau. Voilà Plunker qui travaille .la source
this.myInputVariable.nativeElement.value = "";
? /myInputVariable
est en effet de typeElementRef
Angulaire 5
html
modèle
Le bouton n'est pas requis. Vous pouvez le réinitialiser après un événement de changement, c'est juste pour la démonstration
la source
Une façon d'y parvenir consiste à envelopper votre entrée dans une
<form>
balise et à la réinitialiser.Je n'envisage pas de joindre un formulaire à l'un
NgForm
ou à l'FormControl
autre.https://plnkr.co/edit/Ulqh2l093LV6GlQWKkUA?p=preview
la source
.reset()
méthode sur viewChild ??Je réinitialise généralement mon entrée de fichier après avoir capturé les fichiers sélectionnés. Pas besoin d'appuyer sur un bouton, vous avez tout ce qui est nécessaire dans l'
$event
objet que vous passezonChange
:Flux de travail différent, mais l'OP ne mentionne pas que le fait d'appuyer sur un bouton est une exigence ...
la source
Version courte Plunker :
Et je pense que le cas le plus courant est de ne pas utiliser le bouton mais de le réinitialiser automatiquement. Les instructions de modèle angulaire prennent en charge les expressions de chaînage afin que Plunker :
Et un lien intéressant expliquant pourquoi il n'y a pas de récursivité sur le changement de valeur.
la source
Je pense que c'est simple, utilisez #variable
Option "variable.value = null" également disponible
la source
Dans mon cas, je l'ai fait comme ci-dessous:
Je le réinitialise en utilisant #fileInput en HTML plutôt que de créer un ViewChild dans component.ts. Chaque fois que vous cliquez sur le bouton "Télécharger le fichier", il réinitialise d'abord #fileInput, puis déclenche la
#fileInput.click()
fonction. Si un bouton séparé doit être réinitialisé, un clic#fileInput.value=''
peut être exécuté.la source
modèle:
composant:
la source
Si vous rencontrez un problème avec ng2-file-upload,
HTML:
composant
la source
J'ai ajouté cette balise d'entrée dans la balise de formulaire.
J'ai tapoté angulaire, j'ai ajouté des lignes ci-dessous, obtenez votre identifiant de formulaire dans les formulaires de document et rendez cette valeur nulle.
Imprimez document.forms dans la console et vous pourrez vous faire une idée.
la source
vous pouvez utiliser une variable de référence de modèle et l'envoyer à une méthode
html
composant
la source
J'utilise une approche très simple. Après le téléchargement d'un fichier, je supprime brièvement le contrôle d'entrée, en utilisant * ngIf. Cela entraînera la suppression du champ d'entrée du dom et l'ajout de nouveau, par conséquent, il s'agit d'un nouveau contrôle, et par conséquent, il est utilisé:
showUploader: boolean = true; async upload($event) { await dosomethingwiththefile(); this.showUploader = false; setTimeout(() =>{ this.showUploader = true }, 100); }
<input type="file" (change)="upload($event)" *ngIf="showUploader">
la source
<input type="file" id="image_control" (change)="validateFile($event)" accept="image/gif, image/jpeg, image/png" />
la source