如何从角度2中的按钮单击触发输入文件的单击事件?

amo*_*mol 33 file-upload file angular

<input type="file" accept="image/*">

<button>Upload file</button>
Run Code Online (Sandbox Code Playgroud)

如何从Angular 2中按钮的单击事件触发input type = file的click事件?

yur*_*zui 88

您可以使用模板引用变量,如下所示:

<input type="file" accept="image/*" #file>
<button (click)="file.click()">Upload file</button>
Run Code Online (Sandbox Code Playgroud)

相应的plunkr在这里https://plnkr.co/edit/JB4HY0oxEUgXXIht2wAv?p=preview


Pan*_*kar 10

您可以为输入文件字段声明变量,#file然后只有文件更改执行调用upload函数将上传的文件传递给函数.

<input #file type="file" accept="image/*" (change)="upload(file.files)">

<button #upload (click)="file.click()">Upload file</button>
Run Code Online (Sandbox Code Playgroud)


小智 5

在Angular 4中

HTML:

<ion-input type="file" formControlName="avatar"></ion-input>
<button type="button" ion-button (click)="selectFile()"></button>
Run Code Online (Sandbox Code Playgroud)

Javascript:

selectFile() {
    let element: HTMLElement = document.querySelector('input[type="file"]') as HTMLElement;
    element.click();
}
Run Code Online (Sandbox Code Playgroud)

对我来说有用。


Man*_*eep 5

在Angular 4中

HTML:

<input #fileUpload type="file" (click)="fileUpload.value = null"(change)="importFile($event)" style="display:none"
accept="image/*">
<button (click)="fileUpload.click()">  </button>
Run Code Online (Sandbox Code Playgroud)

打字稿:

importFile(event) {

if (event.target.files.length == 0) {
   console.log("No file selected!");
   return
}
  let file: File = event.target.files[0];
  // after here 'file' can be accessed and used for further process
}
Run Code Online (Sandbox Code Playgroud)

考虑到将来选择同一文件不起作用的问题,在输入标签单击事件中,我们将设置为null,这允许同一文件第二次选择。