Angular 上传文件 可参考Angular2使用ng2-file-upload上传文件

这里记录在开发过程中遇到的问题:

  1. 删除选择的文件后,不能再选择上次选择的相同的文件

在 firefox 浏览器中,当未选择文件时,原样式是:



当已选择文件时,原样式是:

根据设计要求,需要添加删除按钮,用于删除选择的文件。

在开发的过程中发现删除后,不能选择上一次选择的相同的文件,而其他的文件可以选择。

因为选择文件的时候是用的 (change)事件,所以在删除之后不能选择相同的文件。

我的方法是,删除之后清除掉上传的 input dom,然后再创建这个 dom。

模板中:

input 元素添加 *ngIf = "isShowSelectFile"

组件中:

初始化时,isShowSelectFile: boolean = true;

删除时:

this.isShowSelectFile = false;
setTimeout(() => {
this.isShowSelectFile = true;
}, 100);

这里附上关键代码,查看codepen在线示例关键代码(**ng2-file-upload 插件在 Angular 中怎么使用请参考Angular2使用ng2-file-upload上传文件 **):

<div class="upload-template">
<strong>上传模板:</strong>
<div class="upload-file-container">
<span class="upload-name" [class.uploaded-template]="selectedFileName !== '选择文件'">{{selectedFileName}}</span>
<input id="selectFile" type="file" *ngIf="isShowSelectFile" placeholder="选择填写好的数据文件" title="选择填写好的数据文件"
ng2FileSelect
[uploader]="uploader"
[disabled]="isImportingData"
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
(change)="selectedFileOnChanged($event)">
</div>
<!--若文件已上传-->
<button [hidden]="selectedFileName == '选择文件'" type="button" class="delete" title="删除" (click)="deleteUploadedFile()">删除</button>
</div>
// 删除上传的文件
deleteUploadedFile() {
this.selectedFileName = "选择文件";
this.uploader.clearQueue();
this.uploadEnabled = false;
this.isShowSelectFile = false;
setTimeout(() => {
this.isShowSelectFile = true;
}, 100);
} selectedFileOnChanged(event:any) {
let filePath = event.target.files[0].name; //用户取消选择文件
if(event.target.value =="") {
this.uploader.clearQueue();
this.selectedFileName = "选择文件";
this.uploadEnabled = false;
} else {
//每次选择后,都只保留最新选择的文件
let fileCount = this.uploader.queue.length;
if(fileCount > 1) {
for(let i = 1; i < fileCount; i++) {
this.uploader.removeFromQueue(this.uploader.queue[0])
}
}
} this.uploadEnabled = this.uploader.queue.length > 0;
}
SCSS:

.upload-template {
$size: 36px;
.upload-file-container {
position: relative;
height: $size;
line-height: $size;
cursor: pointer;
margin-left: 10px;
.upload-name {
z-index: 2;
width: 100%;
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
display: block;
text-decoration: underline;
height: $size;
line-height: $size;
color: #29e;
overflow-x: hidden;
text-overflow: ellipsis;
white-space: nowrap;
&.uploaded-template {
color: #444;
text-decoration: none;
}
& + input {
z-index: 3;
width: 100%;
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
display: block;
height: $size;
line-height: $size;
opacity: 0;
}
}
}
.delete {
float: left;
color: #f00;
line-height: $size;
padding-right: 1em;
padding-left: 1em;
}
}

在 firefox 浏览器中,当未选择文件时,美化后样式是:



当已选择文件时,美化后样式是:

Angular 使用 ng2-file-upload 上传文件遇到的问题的更多相关文章

  1. Struts Upload上传文件

    1.Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.te ...

  2. php 下 html5 XHR2 + FormData + File API 上传文件

    FormData的作用: FormData对象可以帮助我们自动的打包表单数据,通过XMLHttpRequest的send()方法来提交表单.当然FormData也可以动态的append数据.FormD ...

  3. element-ui upload上传文件并携带参数 使用formData对象

    需求:上传文件的时候,需要携带其他的参数 问题:使用upload上传文件时,必须使用formData对象,而其他的参数通过data获取的到的,formData和data是不能同时传输的 解决:获取到的 ...

  4. thinkphp Upload上传文件在客户端生成的临时文件$_FILES['file']['tmp_name']

    1.关于thinkphp 的Upload的$_FILES['file']['tmp_name'] 在使用thinkphp上传图片的时候,在上传的$_FILES数组中,有一个$_FILES['file' ...

  5. input type file onchange上传文件的过程中,遇到同一个文件二次上传无效的问题。

    不要采用删除当前input[type=file]这个节点,然后再重新创建dom这种方案,这样是不合理的.解释如下:input[type=file]使用的是onchange去做,onchange监听的为 ...

  6. SSH Secure File Transfer上传文件错误:encountered 1 errors during the transfer解决办法

    在使用SSH 工具向Linux服务器上传文件时,弹出 encountered 1 errors during the transfer 错误. 解决方案: 1.准备上传的那个文件所在目录路径存在(), ...

  7. ie8及其以下版本兼容性问题之input file隐藏上传文件

    文件上传时,默认的file标签很难看,而且每个浏览器下都有很大差距.因此我们基本都把真正的file标签给隐藏,然后创建一个标签来替代它.但是由于IE出于安全方面的考虑上传文件时必须点击file的浏览按 ...

  8. input[type='file']获取上传文件路径案例

    最近在项目时,需要获取用户的上传文件的路径,便写了一个demo: <body> <input type="file" name="" valu ...

  9. input type file onchange上传文件的过程中,同一个文件二次上传无效的问题。

    不要采用删除当前input[type=file]这个节点,然后再重新创建dom这种方案,这样是不合理的.解释如下:input[type=file]使用的是onchange去做,onchange监听的为 ...

  10. input type='file'限制上传文件类型

    前端与后台数据进行对接时,就避免不了要使用ajax进行http请求,常用的请求就两个post与get:然而常见的post请求的需求是文件上传,可能我一说到文件上传大家都觉得so  easy啊,没什么嘛 ...

随机推荐

  1. 学习:Windows API核心DLL文件

    在 Windows 的系统目录中,存在着很多的动态链接库文件(DLL 文件).这些 DLL 文件中包括了 Windows API 函数可执行程序. DLL 将各函数"导出",这样应 ...

  2. 平衡二叉树(Java)

    package com.rao.linkList; /** * @author Srao * @className AvlTree * @date 2019/12/3 21:23 * @package ...

  3. [Algorithm] Bitwise Operators

    "|" can be used as assign "&" can be used as check // Read, Write, Execute / ...

  4. vim文本编辑器——文件导入、命令查找、导入命令执行结果、自定义快捷键、ab命令、快捷键的保存

    1.文件的导入(r): 导入前: 导入后: 在光标处,将tmp目录下的zhbb文件的内容导入到了当前文件. 2.命令的查找: 3.导入命令的执行结果: 光标所在行为导入的位置. 4.自定义快捷键: ( ...

  5. AcWing 95 费解的开关

    目录 前言 题目链接 思路 代码 前言 博客咕咕咕了好久了,是时候写一下了 题目链接 AcWing 95 费解的开关 思路 首先可以看出 1.每一个位置顶多只会操作一次.因为如果操作两次的话,相当于不 ...

  6. java stackoverflowerror与outofmemoryerror区别

    1.stackoverflow: 每当java程序启动一个新的线程时,java虚拟机会为他分配一个栈,java栈以帧为单位保持线程运行状态:当线程调用一个方法是,jvm压入一个新的栈帧到这个线程的栈中 ...

  7. PowerDesigner应用02 逆向工程之导出PDM文件前过滤元数据(表、视图、存储过程等)

    在上一篇文章<PowerDesigner应用01 逆向工程之配置数据源并导出PDM文件>步骤二中导出了目标数据库对应的PDM文件, 该文件中展示出了所有表的信息与关系. 某些业务场景下只需 ...

  8. 【Gamma阶段】第一次Scrum Meeting

    冰多多团队-Gamma阶段第一次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 卓培锦 推广软件,发放调查问卷 修改可移动button以及button手感反馈优化,编辑器风格切换(夜间模式 ...

  9. java和vue2.0

    1 java中的el表达式${对象.属性}和vue中的双向数据绑定{{mode.xx}}感觉有点类似 2 java中  request.setAttribute("hots", l ...

  10. 简述 IntentFilter(意图过滤器)

    1.什么是IntentFilter ? IntentFilter翻译成中文就是“意图过滤器”,主要用来过滤隐式意图.当用户进行一项操作的时候,Android系统会根据配置的 “意图过滤器” 来寻找可以 ...