Вот как выглядит мой тег ввода:
<input type="file" placeholder="File Name" name="filename" (change)="onChange($event)">
<button>Reset</button>
Я хочу сбросить выбранный файл в Angular 2. Помощь будет очень признательна. Дайте мне знать, если вам понадобятся подробности.
PS
Я мог бы получить сведения о файле из $event
параметров и сохранить его в переменной машинописного текста, но эта переменная не привязана к тегу ввода.
Ответы:
Вы можете использовать
ViewChild
для доступа к вводу в вашем компоненте. Во-первых, вам нужно добавить#someValue
к своему вводу, чтобы вы могли прочитать его в компоненте:<input #myInput type="file" placeholder="File Name" name="filename" (change)="onChange($event)">
Затем в вашем компоненте вам нужно импортировать
ViewChild
из@angular/core
:import { ViewChild } from '@angular/core';
Затем вы используете
ViewChild
для доступа к вводу из шаблона:@ViewChild('myInput') myInputVariable: ElementRef;
Теперь вы можете использовать
myInputVariable
для сброса выбранного файла, потому что это ссылка для ввода#myInput
, например метод create,reset()
который будет вызываться приclick
событии вашей кнопки:reset() { console.log(this.myInputVariable.nativeElement.files); this.myInputVariable.nativeElement.value = ""; console.log(this.myInputVariable.nativeElement.files); }
Первый
console.log
напечатает выбранный вами файл, второйconsole.log
напечатает пустой массив, потому чтоthis.myInputVariable.nativeElement.value = "";
удаляет выбранный файл (ы) из ввода. Мы должны использоватьthis.myInputVariable.nativeElement.value = "";
для сброса значения ввода, потому чтоFileList
атрибут input доступен только для чтения , поэтому невозможно просто удалить элемент из массива. Вот рабочий Plunker .источник
this.myInputVariable.nativeElement.value = "";
? /myInputVariable
действительно типаElementRef
Угловой 5
html
шаблон
Кнопка не требуется. Вы можете сбросить его после события изменения, это просто для демонстрации
источник
Один из способов добиться этого - обернуть ввод в
<form>
тег и сбросить его.Я не считая крепления Чет формы
NgForm
илиFormControl
либо.https://plnkr.co/edit/Ulqh2l093LV6GlQWKkUA?p=preview
источник
.reset()
метод viewChild ??Обычно я сбрасываю ввод файла после захвата выбранных файлов. Не нужно нажимать кнопку, у вас есть все необходимое в
$event
объекте, который вы передаетеonChange
:Другой рабочий процесс, но OP не упоминает, что нажатие кнопки является требованием ...
источник
Краткая версия Plunker :
И я думаю, что более распространенный случай - не использовать кнопку, а выполнять сброс автоматически. Операторы Angular Template поддерживают выражения цепочки, поэтому Plunker :
И интересная ссылка о том, почему нет рекурсии при изменении значения.
источник
Я думаю, это просто, используйте #variable
Также доступна опция "variable.value = null"
источник
В моем случае я сделал это, как показано ниже:
Я сбрасываю его с помощью #fileInput в HTML, а не создаю ViewChild в component.ts. При каждом нажатии кнопки «Загрузить файл» сначала сбрасывается #fileInput, а затем запускается
#fileInput.click()
функция. Если для сброса требуется какая-либо отдельная кнопка, то#fileInput.value=''
ее можно выполнить по щелчку .источник
шаблон:
составная часть:
источник
Если вы столкнулись с проблемой с ng2-file-upload,
HTML:
составная часть
источник
Я добавил этот тег ввода в тег формы ..
Я угловой машинописный текст, я добавил строки ниже, получил идентификатор вашей формы в формах документа и сделал это значение нулевым.
Распечатайте document.forms в консоли, и вы сможете понять ..
источник
вы можете использовать ссылочную переменную шаблона и отправить ее методу
html
составная часть
источник
Я использую очень простой подход. После загрузки файла я вскоре удаляю элемент управления вводом, используя * ngIf. Это приведет к тому, что поле ввода будет удалено из dom и добавлено повторно, следовательно, это новый элемент управления и, следовательно, он пуст:
showUploader: boolean = true; async upload($event) { await dosomethingwiththefile(); this.showUploader = false; setTimeout(() =>{ this.showUploader = true }, 100); }
<input type="file" (change)="upload($event)" *ngIf="showUploader">
источник
<input type="file" id="image_control" (change)="validateFile($event)" accept="image/gif, image/jpeg, image/png" />
источник