问题描述

在最近的项目开发中遇到了这样的一个问题,当我上传了一个文件时,我将获取到的文件名清空后,却无法再次上传相同的文件

<template>
<div class="hello">
<input type="button" value="上传文件" name="" id="" @click="updata">
<input type="file" style="display:none" @change="getFile" id="input-file">
<div v-if="fileName">
<p>上传的文件名:{{fileName}}</p>
<button @click="delFile">清空文件</button>
</div>
</div>
</template> <script>
import $ from 'n-zepto'
export default {
name: 'HelloWorld',
data () {
return {
fileName: ''
}
},
methods:{
updata(){ // 唤起change事件
$('#input-file').click()
},
getFile(e){ // change事件
this.doSomething()
},
doSomething(){ // do something
this.fileName = e.target.files[0].name
},
delFile(){
this.fileName=''
}
}
}
</script>

因为我只是将data中的属性值清空而已,文件名没有变当然会不出发change事件

解决办法

目前网上有好多解决办法,但基本上都无法在vue上使用,于是我想到了v-if

v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。

于是在代码中加入了一个小的开关,唤起change事件时就将他销毁

事件结束时再将它重建,这样问题就轻松的解决了

<template>
<div class="hello">
<input type="button" value="上传文件" name="" id="" @click="updata">
<input v-if="ishowFile" type="file" style="display:none" @change="getFile" id="input-file">
<div v-if="fileName">
<p>上传的文件名:{{fileName}}</p>
<button @click="delFile">清空文件</button>
</div>
</div>
</template> <script>
import $ from 'n-zepto'
export default {
name: 'HelloWorld',
data () {
return {
fileName: '',
ishowFile: true,
}
},
methods:{
updata(){ // 唤起change事件
$('#input-file').click()
this.ishowFile = false // 销毁
},
getFile(e){ // change事件
this.doSomething()
this.ishowFile = false // 重建
},
doSomething(){ // do something
this.fileName = e.target.files[0].name
},
delFile(){
this.fileName=''
}
}
}
</script>

最新文章

  1. easyUI数据表格datagrid之分页
  2. solr6.1-----solrJ 程序管理索引库
  3. iOS ASIHTTPRequest 使用指南
  4. Oracle表空间常用操作
  5. select option 下拉多选单选bootstrap插件使用总结2
  6. 摘要算法CRC8、CRC16、CRC32,MD2 、MD4、MD5,SHA1、SHA256、SHA384、SHA512,RIPEMD、PANAMA、TIGER、ADLER32
  7. Facebook新框架React Native,一套搞定App开发[转]
  8. asp.net访问WebService的各种方式
  9. iOS打包后收不到推送信息
  10. Android测试:Fundamentals of Testing
  11. java第5章学习总结
  12. 深入浅出QOS详解(转)
  13. cookie的基本操作
  14. Windows进程的内核对象句柄表
  15. VC++下使用ADO操作数据库
  16. JAVA String.format 方法使用介绍&lt;转&gt;
  17. BZOJ4977: [[Lydsy1708月赛]跳伞求生(不错的贪心)
  18. 基于Spring的最简单的定时任务实现与配置(三)--番外篇 cron表达式的相关内容
  19. WMI、WQL语言、WQL测试工具wbemtest.exe
  20. net core集成CAP

热门文章

  1. 恭喜发财! -- 手把手教你仿造一个qq下拉抢红包 Android自定义view
  2. 使用swift语言进行IOS应用开发
  3. RedHat系列软件管理(第二版) --二进制软件包管理
  4. MfgTool (i.MX53)使用
  5. ANSI控制码的说明
  6. matlab GUI保存axes(坐标轴)上的图像
  7. 工作中常用Git指令操作
  8. http 状态表
  9. datetimepicker日期框选择后,无法触发bootstrapValidator
  10. SQL 逻辑优化 case when 转为 union all