Seperti inilah tampilan tag input saya:
<input type="file" placeholder="File Name" name="filename" (change)="onChange($event)">
<button>Reset</button>
Saya ingin mengatur ulang file yang dipilih di Angular 2. Bantuan akan sangat kami hargai. Beri tahu saya jika Anda membutuhkan detail lebih lanjut.
PS
Saya bisa mendapatkan detail file dari $event
parameter dan menyimpannya dalam variabel skrip, tetapi variabel ini tidak terikat ke tag input.
Jawaban:
Anda dapat menggunakan
ViewChild
untuk mengakses input di komponen Anda. Pertama, Anda perlu menambahkan#someValue
masukan Anda sehingga Anda dapat membacanya di komponen:<input #myInput type="file" placeholder="File Name" name="filename" (change)="onChange($event)">
Kemudian di komponen Anda, Anda perlu mengimpor
ViewChild
dari@angular/core
:import { ViewChild } from '@angular/core';
Kemudian Anda gunakan
ViewChild
untuk mengakses input dari template:@ViewChild('myInput') myInputVariable: ElementRef;
Sekarang Anda dapat menggunakan
myInputVariable
untuk mengatur ulang file yang dipilih karena ini adalah referensi untuk dimasukkan#myInput
, misalnya membuat metodereset()
yang akan dipanggil pada saatclick
tombol Anda:reset() { console.log(this.myInputVariable.nativeElement.files); this.myInputVariable.nativeElement.value = ""; console.log(this.myInputVariable.nativeElement.files); }
Pertama
console.log
akan mencetak file yang Anda pilih, keduaconsole.log
akan mencetak array kosong karenathis.myInputVariable.nativeElement.value = "";
menghapus file yang dipilih dari input. Kita harus menggunakanthis.myInputVariable.nativeElement.value = "";
untuk mereset nilai input karenaFileList
atribut input hanya bisa dibaca , jadi tidak mungkin untuk menghapus item dari array. Ini Plunker yang berfungsi .sumber
this.myInputVariable.nativeElement.value = "";
? /myInputVariable
memang tipeElementRef
Sudut 5
html
template
Tombol tidak diperlukan. Anda dapat mengatur ulang setelah acara perubahan, itu hanya untuk demonstrasi
sumber
Salah satu cara untuk mencapainya adalah dengan memasukkan masukan Anda
<form>
tag dan mengatur ulangnya.Saya tidak mempertimbangkan untuk melampirkan formulir
NgForm
atauFormControl
keduanya.https://plnkr.co/edit/Ulqh2l093LV6GlQWKkUA?p=preview
sumber
.reset()
metode di viewChild ??Saya biasanya mengatur ulang input file saya setelah mengambil file yang dipilih. Tidak perlu menekan tombol, Anda memiliki semua yang diperlukan di
$event
objek yang Anda teruskanonChange
:Alur kerja berbeda, tetapi OP tidak menyebutkan menekan tombol adalah persyaratan ...
sumber
Versi pendek Plunker :
Dan saya pikir kasus yang lebih umum adalah tidak menggunakan tombol tetapi melakukan reset secara otomatis. Pernyataan Template Angular mendukung ekspresi rantai sehingga Plunker :
Dan tautan menarik tentang mengapa tidak ada rekursi pada perubahan nilai.
sumber
Saya pikir itu sederhana, gunakan #variable
Opsi "variable.value = null" juga tersedia
sumber
Dalam kasus saya, saya melakukannya seperti di bawah ini:
Saya menyetel ulang menggunakan #fileInput di HTML daripada membuat ViewChild di component.ts. Setiap kali tombol "Unggah File" diklik, pertama-tama tombol akan menyetel ulang #fileInput lalu memicu
#fileInput.click()
fungsi. Jika ada tombol terpisah yang diperlukan untuk mengatur ulang maka di klik#fileInput.value=''
dapat dijalankan.sumber
template:
komponen:
sumber
Jika Anda menghadapi masalah dengan ng2-file-upload,
HTML:
komponen
sumber
Saya telah menambahkan tag masukan ini ke dalam tag formulir ..
Saya tipe skrip sudut, saya telah menambahkan baris di bawah ini, dapatkan id formulir Anda dalam bentuk dokumen dan jadikan nilai itu sebagai null.
Cetak document.forms di konsol dan Anda bisa mendapatkan ide ..
sumber
Anda dapat menggunakan variabel referensi template dan mengirim ke suatu metode
html
komponen
sumber
Saya menggunakan pendekatan yang sangat sederhana. Setelah file diunggah, saya segera menghapus kontrol input, menggunakan * ngIf. Itu akan menyebabkan field input dihapus dari dom dan ditambahkan kembali, akibatnya itu adalah kontrol baru, dan oleh karena itu kosong:
showUploader: boolean = true; async upload($event) { await dosomethingwiththefile(); this.showUploader = false; setTimeout(() =>{ this.showUploader = true }, 100); }
<input type="file" (change)="upload($event)" *ngIf="showUploader">
sumber
<input type="file" id="image_control" (change)="validateFile($event)" accept="image/gif, image/jpeg, image/png" />
sumber