解决vue项目中type=”file“ change事件只执行一次的问题


Posted in Javascript onMay 16, 2018

问题描述

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

<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>

总结

以上所述是小编给大家介绍的vue项目中解决type=”file“ change事件只执行一次的问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript输入邮箱自动提示实例代码
Jan 13 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
Dec 18 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
Aug 13 Javascript
3种js实现string的substring方法
Nov 09 Javascript
微信小程序 less文件编译成wxss文件实现办法
Dec 05 Javascript
函数四种调用模式以及其中的this指向
Jan 16 Javascript
基于Datatables跳转到指定页的简单实例
Nov 09 Javascript
vue中post请求以a=a&amp;b=b 的格式写遇到的问题
Apr 27 Javascript
js中的reduce()函数讲解
Jan 18 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
Aug 02 jQuery
15分钟上手vue3.0(小结)
May 20 Javascript
原生JS实现音乐播放器的示例代码
Feb 25 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
May 15 #Javascript
JavaScript常用截取字符串的三种方式用法区别实例解析
May 15 #Javascript
vue中keep-alive的用法及问题描述
May 15 #Javascript
react中使用swiper的具体方法
May 15 #Javascript
vue addRoutes实现动态权限路由菜单的示例
May 15 #Javascript
浅谈AngularJS中$http服务的简单用法
May 15 #Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
May 15 #Javascript
You might like
php绘图之生成饼状图的方法
2015/01/24 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
2016/05/16 PHP
PHP实现批量检测网站是否能够正常打开的方法
2016/08/23 PHP
实例讲解通过​PHP创建数据库
2019/01/20 PHP
Javascript String.replace的妙用
2009/09/08 Javascript
js动画效果制件让图片组成动画代码分享
2014/01/14 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
JavaScript中的console.time()函数详细介绍
2014/12/29 Javascript
javascript折半查找详解
2015/01/26 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
探索Vue.js component内容实现
2016/11/03 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
2017/02/15 Javascript
ES6中Proxy与Reflect实现重载(overload)的方法
2017/03/30 Javascript
详解前后端分离之VueJS前端
2017/05/24 Javascript
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
详解vue 自定义组件使用v-model 及探究其中原理
2019/10/11 Javascript
浅谈Vue 自动化部署打包上线
2020/06/14 Javascript
Vant 中的Toast设置全局的延迟时间操作
2020/11/04 Javascript
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
Python 实现两个列表里元素对应相乘的方法
2018/11/14 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
2019/07/11 Python
PyQt 图解Qt Designer工具的使用方法
2019/08/06 Python
Python的赋值、深拷贝与浅拷贝的区别详解
2020/02/12 Python
Python识别html主要文本框过程解析
2020/02/18 Python
个人简历自我评价八例
2013/10/31 职场文书
消防安全标语
2014/06/07 职场文书
代理人委托书
2014/08/01 职场文书
法人代表授权委托书范文
2014/09/10 职场文书
公司感恩节活动策划书
2014/10/11 职场文书
2014企业年终工作总结
2014/12/23 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
分析JVM源码之Thread.interrupt系统级别线程打断
2021/06/29 Java/Android
php png失真的原因及解决办法
2021/10/24 PHP
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫