我创建了一个类型为“ 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
看起来像我想要的样子,但是当我单击时什么也没发生,我想这是因为button
在button
上方,因此label
没有得到点击,我尝试使用label
,但不起作用。
关于如何解决此问题的任何想法?
答案 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>