角度-CSS-自定义类型=文件输入,如何使用按钮代替标签?

时间:2018-12-17 10:59:01

标签: javascript css angular input

我创建了一个类型为“ file”的自定义输入字段,因为我不喜欢默认字段。 为此,我做到了:

<input
            #uploadFile
            type="file"
            id="uploadFile"
            class="hidden-input"
            accept="image/jpeg, .jpeg, image/png, .png, image/pjpeg, .jpg, .docx, .pdf"
            (change)="selectFile($event.target.files[0])"
        />

     <label [matTooltip]="Upload a file" for="uploadFile">
<mat-icon>folder_open</mat-icon>
</label>

因此基本上它隐藏了原始输入,并且使用标签,我可以通过单击mat-icon打开浏览文件窗口。

这很好用,但是我不想使用标签<button mat-icon-button>而不是标签来对图标产生很好的波纹效果,但是标签中使用的"for"不适用于{{ 1}}。

如果我用上面的按钮标签将<button>包装在标签标签中,将会发生mat-icon看起来像我想要的样子,但是当我单击时什么也没发生,我想这是因为buttonbutton上方,因此label没有得到点击,我尝试使用label,但不起作用。

关于如何解决此问题的任何想法?

3 个答案:

答案 0 :(得分:2)

只需创建一个按钮,其单击将触发隐藏文件输入上的点击事件

<button (click)="uploadFile.click()" mat-icon-button>
 <mat-icon>arrow_upward</mat-icon>
</button>

答案 1 :(得分:0)

将此链接添加到您的index.html

<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

添加到您的app.module MatIconModule

以HTML格式显示:

<input #uploadFile
            type="file"
            id="uploadFile"
            class="hidden-input"
            accept="image/jpeg, .jpeg, image/png, .png, image/pjpeg, .jpg, .docx, .pdf"
            />

<button for="uploadFile" (click)="selectFile()">
<mat-icon>folder_open</mat-icon>
</button>

在ts中使onchange功能:

 files: Array<any> = [];

  selectFile() {
    const fileUpload = document.getElementById('uploadFile') as HTMLInputElement;
    fileUpload.onchange = () => {
      for (let index = 0; index < fileUpload.files.length; index++) {
        const file = fileUpload.files[index];
        this.files.push(data: file);
      }
    };
    fileUpload.click();
  }

答案 2 :(得分:0)

.label{
      padding: 10px;
      color: #fff;
    }



    input[type="file"] {
        display: none;
    }

    .label-input{
      font: bold 13px Arial;
      text-decoration: none;
      background-color: #2387aa;
      color: #EEEEEE;
      padding: 4px 79px 5px 66px;
      border-top: 1px solid #CCCCCC;
      /* border-right: 1px solid #333333; */
      /* border-bottom: 1px solid #333333; */
      border-left: 1px solid #CCCCCC;
    }


 <label class="label-input"> Upload file
                    <input type="file" id="File">
                </label>